Turbo Pascal提供了八个标准函数和标准过程,如下:
函数和过程名 功 能 说 明
1、copy(s,m,n) 取s中第m个字符开始的n个字符,若m大于s的长度,则返回空值;若m+n大于s 长度,则截断。
2、length(s) 求s的动态的长度 返回值为整数
3、pos(sub,s) 在s中找子串sub 返回值为sub在s中的位置,为byte型
4、insert(sour,s,m) 在s的第m个字符位置处插入子串sour 若返回串超过255,则截断
5、delete(s,m,n) 删除s中第m个字符开始的n个字符串, 若m大于s的长度,则不删除;否则,若m+n大于s的长度,则删除到结尾
6、str(x[:w[:d]],s) 将整数或实数x转换成字符串s, w 和 d是整型表达式,意义同带字宽的write语句
7、val(s,x,code) 将字符串S 转换成整数或实数x;
若S中有非法字符,则code存放非法字符在S中的下标;否则,code为零。code为整型
Val(S; var V; var Code: Integer)第一个参数是要转换的字符串,第二个参数存放转换后的数字,可以是整数或浮点数,第三个参数存放出错的字符索引值
8、upcase(ch) 将字母ch转换成大写字母 若ch不为小写字母,则不转换
例:
校队输入日期(标准英语日期,月/日/年)的正确性,若输入正确则以年,月,日的方式输出。
程序如下:
program ex8_4
type
TForm1=class(TForm)
Function InputBox(Const ACaption:String,APrompt,ADefault:String):String;
//用于显示带有一个编辑框的对话框 (对话框标题,编辑框输入提示,编辑框中的缺省字符串)
private
{Private declarations}
public
{Public declarations}
const
max:arrary[1..12] of byte=(31,29,31,30,31,30,31,31,30,31,30,31);
var
st:string;
p,w,y,m,d:integer;
procedure err;
procedure init(var x:integer);
Function InputBox(Const ACaption:String,APrompt,ADefault:String):String;
//用于显示带有一个编辑框的对话框 (对话框标题,编辑框输入提示,编辑框中的缺省字符串)
end;
var
Form1:TForm1;
implementation
{$R*.DFM}
procedure err;
begin
write('Input Error1‘);
readln;
halt;
//halt会发生FormDestory事件,用于强行终止应用程序的执行,返回操作系统(非正常退出方式)。
delphi关闭程序 Close,application.Terminate与halt有什么区别
在有多个Form窗体时可以体现出来. 用close是只关闭本窗体,而用Application.terminate是关闭整个程序,包括所有窗体.
(1)当Close是一个主窗体时,程序会退出。Close会发生FormClose事件,FormCloseQuery事件。close,只是针对窗体。主窗体close以后程序就Application.Terminate了。子窗体close以后,没释放,还可以Show出来。也是说主窗口的Close方法其实也是调用Application的Terminate来终止程序的。
(2)Halt会发生FormDestory事件,,用于强行终止应用程序的执行,返回操作系统(非正常退出方式)。
(3)Application.Terminate以上三个事件都不会发生Application.Terminate就是程序结束了。整个程序结束运行,系统强行收回系统资源当主窗口关闭时或WM_QUIT消息触发时,Terminate自动被调用Application.
Close是正常退出,有应用程序主动交还系统资源另外有一个区别,主窗口的Close方法可以触发OnClose事件而Application.Terminate并不会触发该事件。
end;
Function InputBox(Const ACaption:String,APrompt,ADefault:String):String;
var
DateTime:TDateTime;
begin
DateTime:=now;
InputBox(’ 日期校队窗口','请在此输入日期:月/日/年', DateTime);
procedure init(var x:integer);
begin
p:=pos('/',st);
if (p=0) or (p=1) or (p>3) then
err;
val(copy(st,1,p-1),x,w);
if w<>0 then
err;
delete(st,1,p);
end;
begin
write('The Date is :');
readln(st);
init(m);
init(d);
val(st,y,w);
if not (length(st)<>4) or (w<>0) or (d>max) then err;
if(m=2) and (d=29) then
if (y mod 100)=0 then
begin
if (y mod 400)<>0 then
err;
end;
else if (y mod 4)<>0 then
err;
write('Date:',y '.', m,'.',d);
readln;
end;
分析:
1、判断输入的月和日应是1位或2位的数字,过程中用了一个过程 init ,利用串函数pos
求的分隔符 / 所在的位置而判定输入的月和日是否为1位或2位,利用标准过程val判定
输入的月和日是否为数字;
2、判定月和日是否规定的日期范围及输入的年月是否正确;
3、若输入的月是2月份,则还需考虑闰年的情况。