第十课字符与字符串处理.docx
- 文档编号:13478891
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:10
- 大小:17.97KB
第十课字符与字符串处理.docx
《第十课字符与字符串处理.docx》由会员分享,可在线阅读,更多相关《第十课字符与字符串处理.docx(10页珍藏版)》请在冰点文库上搜索。
第十课字符与字符串处理
第十课 字符与字符串处理
一、字符、字符串类型的使用
(一)字符类型
字符类型为由一个字符组成的字符常量或字符变量。
字符常量定义:
const
字符常量='字符'
字符变量定义:
Ⅱ
Var
字符变量:
char;
字符类型是一个有序类型,字符的大小顺序按其ASCⅡ代码的大小而定。
函数succ、pred、ord适用于字符类型。
例如:
后继函数:
succ('a')='b'
前继函数:
pred('B')='A'
序号函数:
ord('A')=65
例1按字母表顺序和逆序每隔一个字母打印。
即打印出:
acegIkmoqsuwy
zxrvtpnljhfdb
程序如下:
programex8_1;
varletter:
char;
begin
forletter:
='a'to'z'do
if(ord(letter)-ord('a'))mod2=0thenwrite(letter:
3);
writeln;
forletter:
='z'downto'a'do
if(ord(letter)-ord('z'))mod2=0thenwrite(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;
TurboPascal中,一个字符串中的字符可以通过其对应的下标灵活使用。
例如:
var
name:
string;
begin
readln(nsme);
fori:
=1toord(name[0])do
writeln(name[i]);
end.
语句writeln(name[i])输出name串中第i个字符。
例2求输入英文句子单词的平均长度.
程序如下:
programex8_2;
var
ch:
string;
s,count,j:
integer;
begin
write('Thesentenceis:
');
readln(ch);
s:
=0;
count:
=0;
j:
=0;
repeat
inc(j);
ifnot(ch[j]in[':
',',',';','''','!
','?
','.',''])theninc(s);
ifch[j]in['','.','!
','?
']theninc(count);
until(j=ord(ch[0]))or(ch[j]in['.','!
','?
']);
ifch[j]<>'.'thenwriteln('Itisnotasentence.')
elsewriteln('Averagelengthis',s/count:
10:
4);
end.
分析:
程序中,变量s用于存句子中英文字母的总数,变量count用于存放句子中单词的个数,ch[j]表示ch串中的第j个位置上的字符,ord(ch[0])为ch串的串长度。
程序充分利用TurboPascal允许直接通过字符串下标得到串中的字符这一特点,使程序比较简捷。
二、字符串的操作
(一)字符串的运算和比较
由字符串的常量、变量和运算符组成的表达式称为字符串表达式。
字符串运算符包括:
1.+:
连接运算符
例如:
'Turbo'+'PASCAL'的结果是'TurboPASCAL'。
若连接的结果字符串长度超过255,则被截成255个字符。
若连接后的字符串存放在定义的字符串变量中,当其长度超过定义的字符串长度时,超过部份字符串被截断。
例如:
var
str1,str2,str3:
string[8];
begin
str1:
='Turbo';
str2:
='PASCAL';
str3:
=str1+str2;
end.
则str3的值为:
'TurboPA'。
2.=、〈〉、〈、〈=、〉、〉=:
关系运算符
两个字符串的比较规则为,从左到右按照ASCⅡ码值逐个比较,遇到ASCⅡ码不等时,规定ASCⅡ码值大的字符所在的字符串为大。
例如:
'AB'〈'AC'结果为真;
'12'〈'2'结果为真;
'PASCAL'='PASCAL'结果为假;
例3对给定的10个国家名,按其字母的顺序输出。
程序如下:
programex8_3;
vari,j,k:
integer;
t:
string[20];
cname:
array[1..10]ofstring[20];
begin
fori:
=1to10doreadln(cname[i]);
fori:
=1to9do
begin
k:
=i;
forj:
=i+1to10do
ifcname[k]>cname[j]thenk:
=j;
t:
=cname[i];cname[i]:
=cname[k];cname[k]:
=t;
end;
fori:
=1to10dowriteln(cname[i]);
end.
分析:
程序中,当执行到ifcname[k]>cname[j]时,自动将cname[k]串与cname[j]串中的每一个字符逐个比较,直至遇到不等而决定其大小。
这种比较方式是计算机中字符串比较的一般方式。
三、字符串的函数和过程
TurboPascal提供了八个标准函数和标准过程,见下表,利用这些标准函数与标准过程,一些涉及到字符串的问题可以灵活解决。
函数和过程名
功能
说明
copy(s,m,n)
取s中第m个字符开始的n个字符
若m大于s的长度,则返回空串;否则,若m+n大于s的长度,则截断
length(s)
求s的动态的长度
返回值为整数
pos(sub,s)
在s中找子串sub
返回值为sub在s中的位置,为byte型
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为整型
upcase(ch)
将字母ch转换成大写字母
若ch不为小写字母,则不转换
例4校对输入日期(以标准英语日期,月/日/年)的正确性,若输入正确则以年.月.日的方式输出。
程序如下:
programex8_4;
const
max:
array[1..12]ofbyte
=(31,29,31,30,31,30,31,31,30,31,30,31);
var
st:
string;
p,w,y,m,d:
integer;
procedureerr;
begin
write('InputError!
');
readln;
halt;
end;
procedureinit(varx:
integer);
begin
p:
=pos('/',st);
if(p=0)or(p=1)or(p>3)thenerr;
val(copy(st,1,p-1),x,w);
ifw<>0thenerr;
delete(st,1,p);
end;
begin
write('TheDateis:
');
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)
thenifymod100=0
thenbegin
ifymod400<>0thenerr;
end
elseifymod4<>0thenerr;
write('Date:
',y,'.',m,'.',d);
readln;
end.
分析:
此题的题意很简单,但在程序处理时还需考虑以下几方面的问题。
1.判定输入的月和日应是1位或2位的数字,程序中用了一个过程inst,利用串函数pos,求得分隔符/所在的位置而判定输入的月和日是否为1位或2位,利用标准过程val判定输入的月和日是否为数字;
2.判定月和日是否规定的日期范围及输入的年是否正确;
3.若输入的月是2月份,则还需考虑闰年的情况。
例5对输入的一句子实现查找且置换的功能。
程序如下:
programex8_5;
var
s1,s,o:
string;
i:
integer;
begin
write('Thetext:
');
readln(s1);
write('Find:
');readln(s);
write('Replace:
');readln(o);
i:
=pos(s,s1);
whilei<>0dobegin
delete(s1,i,length(s));
insert(o,s1,i);
i:
=pos(s,s1);
end;
writeln(s1);
readln;
end.
分析:
程序中,输入要查找的字符串及要置换的字符串,充分用上了字符串处理的标准过程delete、insert及标准函数pos。
--------------------------------------------------------------------------------
上一篇:
第十一课 枚举、子界、集合及记录类型
下一篇:
第九课 多维数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十 字符 字符串 处理