字符串的操作

[复制链接]
发表于 2023-12-30 10:13:47 | 显示全部楼层 |阅读模式
字符串的操作
(一)字符串的运算和比较
 由字符串的常量、变量和运算符组成的表达式称为字符串表达式,字符串运算符包括:
 +:连接运算符
 例如:"Turbo"+"ASCAL"的结果是"Turbo PASCAL"
 若连接的结果字符串长度超过255,则被截成255个字符;若连接后的字符串存放在定义的字符串变量中,当其长度超过定义的字符串长度时,超过部份字符串被截断。
 例如:var
     str1,str2,str3:string[8];
    begin
     str1:="Turbo";
     str2:="ASCAL";
     str3:=str1+str2;
    end.
 则str3的值为:"TurboPA"
 =、<>、<、<=、>、>=:关系运算符
 两个字符串的比较规则为,从左到右按照ASCⅡ码值逐个比较,遇到ASCⅡ码不等时,规定ASCⅡ码值大的字符所在的字符串为大。
 例如:"AB"<"AC"结果为真
    "12"<"2"结果为真
    "ASCAL"="ASCAL" 结果为假
【例3】对给定的10个国家名,按其字母的顺序输出
 程序如下:
 programex8_3;
 vari,j,k:integer;
  t:string[20];
  cname:array[1..10]of string[20];
 begin
  fori:=1 to 10 do readln(cname);
  fori:=1 to 9 do
  begin
   k:=i;
   forj:=i+1 to 10 do if cname[k]>cname[j] then k:=j;
   t:=cname;cname:=cname[k];cname[k]:=t;
  end;
  fori:=1 to 10 do writeln(cname);
 end.
 分析:程序中,当执行到ifcname[k]>cname[j]时,自动将cname[k]串与cname[j]串中的每一个字符逐个比较,直至遇到不等而决定其大小。这种比较方式是计算机中字符串比较的一般方式。
三、字符串的函数和过程
  TurboPascal提供了八个标准函数和标准过程,见下表,利用这些标准函数与标准过程,一些涉及到字符串的问题可以灵活解决。
函数和过程名  功 能    说 明  
CONCAL(ST1,...,STN)将N个字符串连接起来   等效于ST1+...+ST2,是函数
COPY(S,M,N) 取S中第M个字符开始的N个字符    若M大于S的长度,则返回空串;否则,若M+N大于s的长度,则截断,是函数
LENGTH(S)  求s的动态的长度    返回值为整数,是函数
POS(SUB,S)  在S中找子串SUB   返回值为SUB在S中的位置,为byte型,是函数
UPCASE(CH)  将字母CH转换成大写字母   若CH不为小写字母,则不转换,是函数
INSERT(SOUR,S,M)  在S的第M个字符位置处插入子串SOUR   若返回串超过255,则截断,是过程
DELETE(S,M,N)  删除S中第M个字符开始的N个字符串    若M大于S的长度,则不删除;否则,若M+N大于S的长度,则删除到结尾,是过程
STR(X[:W[]],S)  将整数或实数X转换成字符串S   W和D是整型表达式,意义同带字宽的write语句,是过程
VAL(S,X,CODE)  将字符串S转换成整数或实数X   若S中有非法字符,则CODE存放非法字符在S中的下标;否则,CODE为零,CODE为整型,是过程
FILLCHAR(S,N,CH)给S填充N个相同的CH   用于初始化数组或字符串,N常用SIZEOF(S)代替,是过程
注:关于字符串的几点说明
①空串表示为"",其长度为0,不等于含有一个空格的串" ",它的长度为1;如:A:="";就是将A字符串置空
②FILLCHAR可以用于字符串变量和任何类型数组变量的初始化,比如:
  FILLCHAR(A,SIZEOF(A),0)  将整型数组A全置0
  FILLCHAR(B,SIZEOF(B),TRUE)  将布尔型数组B全置0
  FILLCHAR(C,SIZEOF(C),"A")  将整型字符串C全置"A"
【例4】 校对输入日期(以标准英语日期,月/日/年)的正确性,若输入正确则以年.月.日的方式输出。
   程序如下:
  program ex8_4;
   const
    max:array[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;
    begin
     write("Input Error!");
     readln;
     halt;
    end;
   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);
      ifw<>0 then err;
     delete(st,1,p);
    end;
   begin
    write("The Date is :");
    readln(st);
    init(m);
    init(d);
    val(st,y,w);
     ifnot (length(st)<>4) or (w<>0) or (m>12) or (d>max[m]) thenerr;
     if(m=2) and (d=29)
     then if y mod 100=0
        then begin
             ify mod 400<>0 then err;
           end
     else if y mod 4<>0 then err;
    write("Date : ",y,".",m,".",d);
    readln;
   end.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表