资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
字符和字符串一、字符、字符串类型的使用 (一)字符类型 字符类型为由一个字符组成的字符常量或字符变量,字符常量定义: const 字符常量=字符;字符变量定义: Var 字符变量:char; 字符类型是一个有序类型, 字符的大小顺序按其ASC代码的大小而定,函数succ、pred、ord适用于字符类型,例如:后继函数:succ(a)=b 前继函数:pred(B)=A 序号函数:ord(A)=65 【例1】按字母表顺序和逆序每隔一个字母打印,即打印出: a c e g I k m o q s u w y z x r v t p n l j h f d b 程序如下: program ex8_1; var letter:char; begin for letter:=a to z do if (ord(letter)-ord(a)mod 2=0 then write(letter:3); writeln; for letter:=z downto a do if (ord(letter)-ord(z)mod 2 =0 then write(letter:3); writeln; end. 分析:程序中,我们利用了字符类型是顺序类型这一特性,直接将字符类型变量作为循环变量,使程序处理起来比较直观。 (二)字符串类型 字符串是由字符组成的有穷序列,字符串类型定义: type =stringn; var 字符串变量:字符串类型标识符; 其中:n是定义的字符串长度,必须是0255之间的自然整数,第0号单元中存放串的实际长度,程序运行时由系统自动提供,第1n号单元中存放串的字符,若将stringn写成string,则默认n值为255。 例如:type man=string8;line=string;var name:man;screenline:line;另一种字符类型的定义方式为把类型说明的变量定义合并在一起。 例如:VAR name:STRING8;screenline:STRING;Turbo Pascal中,一个字符串中的字符可以通过其对应的下标灵活使用。 例如:var name:string; begin readln(nsme); for i:=1 to ord(name0) do writeln(namei);end. 语句writeln(namei)输出name串中第i个字符。 【例2】求输入英文句子单词的平均长度程序如下:program ex8_2; var ch:string; s,count,j:integer; begin write(The sentence is :); readln(ch); s:=0; count:=0; j:=0; repeat inc(j); if not (chj in :,;,!,?,., ) then inc(s); if chj in ,.,!,? then inc(count); until (j=ord(ch0) or (chj in .,!,?); if chj. then writeln(It is not a sentence.) else writeln(Average length is ,s/count:10:4); end.分析:程序中,变量s用于存句子中英文字母的总数,变量count用于存放句子中单词的个数,chj表示ch串中的第j个位置上的字符,ord(ch0)为ch串的串长度。程序充分利用Turbo Pascal允许直接通过字符串下标得到串中的字符这一特点,使程序比较简捷。 二、字符串的操作 (一)字符串的运算和比较 由字符串的常量、变量和运算符组成的表达式称为字符串表达式,字符串运算符包括: +:连接运算符例如:Turbo +PASCAL的结果是Turbo PASCAL若连接的结果字符串长度超过255,则被截成255个字符;若连接后的字符串存放在定义的字符串变量中,当其长度超过定义的字符串长度时,超过部份字符串被截断。 例如:var str1,str2,str3:string8;begin str1:=Turbo ;str2:=PASCAL;str3:=str1+str2;end.则str3的值为:Turbo PA=、=:关系运算符 两个字符串的比较规则为,从左到右按照ASC码值逐个比较,遇到ASC码不等时,规定ASC码值大的字符所在的字符串为大。 例如:ABAC 结果为真12cnamej then k:=j; t:=cnamei;cnamei:=cnamek;cnamek:=t; end; for i:=1 to 10 do writeln(cnamei); end. 分析:程序中,当执行到if cnamekcnamej时,自动将cnamek串与cnamej串中的每一个字符逐个比较,直至遇到不等而决定其大小。这种比较方式是计算机中字符串比较的一般方式。 三、字符串的函数和过程 Turbo Pascal提供了八个标准函数和标准过程,见下表,利用这些标准函数与标准过程,一些涉及到字符串的问题可以灵活解决。 函数和过程名 功 能 说 明 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:D,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)代替,是过程 注:关于字符串的几点说明空串表示为,其长度为,不等于含有一个空格的串,它的长度为;如:A:=;就是将A字符串置空FILLCHAR可以用于字符串变量和任何类型数组变量的初始化,比如:FILLCHAR(A,SIZEOF(A),0)将整型数组A全置FILLCHAR(B,SIZEOF(B),TRUE)将布尔型数组B全置FILLCHAR(C,SIZEOF(C),A)将整型字符串C全置A【例4】 校对输入日期(以标准英语日期,月/日/年)的正确性,若输入正确则以年月日的方式输出。 程序如下: program ex8_4; const max:array1.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 (p3) then err; val(copy(st,1,p-1),x,w); if w0 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 (w0) or (m12) or (dmaxm) then err; if (m=2) and (d=29) then if y mod 100=0 then begin if y mod 4000 then err; end else if y mod 40 then err; write(Date : ,y,.,m,.,d); readln; end. 分析:此题的题意很简单,但在程序处理时还需考虑以下几方面的问题。 1判定输入的月和日应是位或位的数字,程序中用了一个过程inst,利用串函数pos,求得分隔符/所在的位置而判定
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号