为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

[专题]字符和字符串类型

2017-12-07 10页 doc 25KB 19阅读

用户头像

is_014457

暂无简介

举报
[专题]字符和字符串类型[专题]字符和字符串类型 一、字符、字符串类型的使用 (一)字符类型 字符类型为由一个字符组成的字符常量或字符变量,字符常量定义: const 字符常量='字符'; 字符变量定义: Var 字符变量:char; 字符类型是一个有序类型, 字符的大小顺序按其ASC?代码的大小而定,函数succ、pred、ord适用于字符类型,例如: 后继函数:succ('a')='b' 前继函数:pred('B')='A' 序号函数:ord('A')=65 【例1】按字母表顺序和逆序每隔一个字母打印,即打印出: a ...
[专题]字符和字符串类型
[专题]字符和字符串类型 一、字符、字符串类型的使用 (一)字符类型 字符类型为由一个字符组成的字符常量或字符变量,字符常量定义: 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 <字符串类型标识符>=string[n]; var 字符串变量:字符串类型标识符; 其中:n是定义的字符串长度,必须是0~255之间的自然整数,第0号单元中存放串的实际长度,程序运行时由系统自动提供,第1~n号单元中存放串的字符,若将string[n]写成string,则默认n值为255。 例如:type man=string[8]; line=string; var name:man; screenline:line; 另一种字符类型的定义方式为把类型的变量定义合并在一起。 例如:VAR name:STRING[8]; screenline:STRING; Turbo Pascal中,一个字符串中的字符可以通过其对应的下标灵活使用。 例如:var name:string; begin readln(nsme); for i:=1 to ord(name[0]) do writeln(name[i]); end. 语句writeln(name[i])输出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 (ch[j] in [':',',',';','''','!','?','.',' ']) then inc(s); if ch[j] in[' ','.','!','?'] then inc(count); until (j=ord(ch[0])) or (ch[j] in ['.','!','?']); if ch[j]<>'.' then writeln('It is not a sentence.') else writeln('Average length is ',s/count:10:4); end. 分析:程序中,变量s用于存句子中英文字母的总数,变量count用于存放句子中单词的个数,ch[j]表示ch串中的第j个位置上的字符,ord(ch[0])为ch串的串长度。程序充分利用Turbo Pascal允许直接通过字符串下标得到串中的字符这一特点,使程序比较简捷。 二、字符串的操作 (一)字符串的运算和比较 由字符串的常量、变量和运算符组成的表达式称为字符串表达式,字符串运算符包括: +:连接运算符 例如:'Turbo '+'PASCAL'的结果是'Turbo PASCAL' 若连接的结果字符串长度超过255,则被截成255个字符;若连接后的字符串存放在定义的字符串变量 中,当其长度超过定义的字符串长度时,超过部份字符串被截断。 例如:var str1,str2,str3:string[8]; begin str1:='Turbo '; str2:='PASCAL'; str3:=str1+str2; end. 则str3的值为:'Turbo PA' =、<>、<、<=、>、>=:关系运算符 两个字符串的比较为,从左到右按照ASC?码值逐个比较,遇到ASC?码不等时,规定ASC?码值大 的字符所在的字符串为大。 例如:'AB'<'AC' 结果为真 '12'<'2' 结果为真 'PASCAL '='PASCAL' 结果为假 】对给定的10个国家名,按其字母的顺序输出 【例3 程序如下: program ex8_3; var i,j,k:integer; t:string[20]; cname:array[1..10] of string[20]; begin for i:=1 to 10 do readln(cname[i]); for i:=1 to 9 do begin k:=i; for j:=i+1 to 10 do if cname[k]>cname[j] then k:=j; t:=cname[i];cname[i]:=cname[k];cname[k]:=t; end; for i:=1 to 10 do writeln(cname[i]); end. 分析:程序中,当执行到if cname[k]>cname[j]时,自动将cname[k]串与cname[j]串中的每一个字符逐个比较,直至遇到不等而决定其大小。这种比较方式是计算机中字符串比较的一般方式。 三、字符串的函数和过程 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个字符位置处插 若返回串超过255,则截断,是过程 入子串SOUR DELETE(S,M,N) 删除S中第M个字符开始的N 若M大于S的长度,则不删除;否则,若M+N大于S 个字符串 的长度,则删除到结尾,是过程 STR(X[:W[:D]],S) 将整数或实数X转换成字符 W和D是整型表达式,意义同带字宽的write语句, 串S 是过程 VAL(S,X,CODE) 将字符串S转换成整数或实 若S中有非法字符,则CODE存放非法字符在S中的 数X 下标;否则,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: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); 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 (m>12) or (d>max[m]) 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(判定输入的月和日应是,位或,位的数字,程序中用了一个过程inst,利用串函数pos,求得分隔符/所在的位置而判定输入的月和日是否为,位或,位,利用标准过程val判定输入的月和日是否为数字; 2(判定月和日是否规定的日期范围及输入的年是否正确; 3(若输入的月是2月份,则还需考虑闰年的情况。 【例5】对输入的一句子实现查找且置换的功能(找到某个子串并换成另一子串)。 程序如下: program ex8_5; var s1,s,o:string; i:integer; begin write('The text:'); readln(s1); write('Find:');readln(s); write('Replace:');readln(o); i:=pos(s,s1); while i<>0 do begin delete(s1,i,length(s)); insert(o,s1,i); i:=pos(s,s1); end; writeln(s1); readln; end. 分析:程序中,输入要查找的字符串及要置换的字符串,充分用上了字符串处理的标准过程delete、insert 及标准函数pos。
/
本文档为【[专题]字符和字符串类型】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索