字符串.docx
《字符串.docx》由会员分享,可在线阅读,更多相关《字符串.docx(6页珍藏版)》请在冰豆网上搜索。
字符串
一、字符与字符串类型的使用
Var字符变量名:
char;
字符类型是一个有序类型,字符的大小顺序按ASCII码的大小决定。
相关的函数有succ、pred、ord、chr等。
VARA:
CHAR;
BEGIN
READLN(A);
WRITELN('A:
',A);
WRITELN('SUCC(A):
',SUCC(A));
WRITELN('PRED(A):
',PRED(A));
WRITELN('ORD(A):
',ORD(A));
WRITELN('CHR(ORD(A)):
',CHR(ORD(A)));
END.
例:
按字母表顺序和逆序每隔一个字母打印。
即打印出:
acegikmoqsuwy
zxrvtpnljhfdb
fori:
=1to13dowrite(chr(63+2*i):
4);writeln;
fori:
=1to13dowrite(chr(92-2*i):
4);writeln
字符串
〖语法分析〗
字符串用于存放整批的字符数据。
通常编程中使用字符串存放字符化了的数字数据。
如高精度运算时存放操作数和运算结果。
字符串可以看作是特殊的字符串数组来处理。
当然,它也有自已的特点。
下面是字符串定义的格式:
vars:
string;s1:
string[15]; s[1]s[2]…s[255] s[0] ord(s[0])
字符串定义时,如不指定长度,则按该类型的最大长度(255个字符)分配空间,使用时最大可用长度为255个;如果在中括号中给出一个具体的值(1—255之间),则按这个值的大小分配空间。
使用时,最大的可用长度即为该值。
1、字符串的输入、输出:
字符串类型既可按数组方式输入、输出,也可直接输入、输出:
readln(s);writeln(s);多个字符串输入时以回车作为数据间的分隔符;每个readln语句只能读入一个字符串。
2、有关字符串的操作:
操作
类型
作用
返回值
例子
length(s)
函数
求字符串s的长度
整型
s:
='123456789';
l:
=length(s);{l的值为9}
字符串的长度存放在s[0]中,ord(s[0])的值与length(s)的值相同。
copy(s,w,k)
函数
复制s中从w开始的k位
字符串
s:
='123456789';
s1:
=copy(s,3,5);{s1的值是'34567'}
val(s,k,code)
过程
将字符串s转为数值,存在k中;code是错误代码
vars:
string;k,code:
integer;
begin
s:
='1234';
val(s,k,code);
write(k);{k=1234}
str(i,s)
过程
将数值i转为字符串s
i:
=1234;
str(i,s);
write(s);{s='1234'}
Delete(s,w,k)
过程
在s中删除从第w位开始的k个字符
s:
='HonestAbeLincoln';
Delete(s,8,4);
Writeln(s);{'HonestLincoln'}
Insert(s1,S,w)
过程
将s1插到s中第w位
S:
='HonestLincoln';
Insert('Abe',S,8);{'HonestAbeLincoln'}
Pos(c,S)
函数
求字符c在s中的位置
整型
S:
='123.5';
i:
=Pos('',S);{i的值为1}
+
运算符
将两个字符串连接起来
s1:
='1234';
s2:
='5678';
s:
=s1+s2;{'12345678'}
[例6、3]把26个英语字母正向、逆向打印出来。
Consts:
string[26]=’abcdefghijklmnopqrstuvwxyz’;Vart:
string[26];I:
integer;Begint:
=’‘;{共26个空格}ForI:
=1to26dobeginT[I]:
=s[27-I];End;Writeln(s);Writeln(t);End.[例6、4]找出所有的四位回文数:
(回文数就是一个数从左往右读与从右往左读都是同一个数)vars:
string[4];n:
integer;beginforn:
=1000to9999dobeginstr(n,s);if(s[1]=s[4])and(s[2]=s[3])then
write(n:
6);end;end.或者用如下程序:
varn:
integer;s,t:
string;beginforn:
=10to99dobeginstr(n,s);t:
=s+s[2]+s[1];write(s:
6);end;end.上述两个程序,哪个快,哪个慢?
练习题:
1、读入一串字符,以句号结束,然后让其倒序输出。
如输入:
Iamastudent.
输出:
tnedutsamaI
2、读入一串数字,以句号结束,请统计其中‘0’到‘9’的各个数字的个数。
如输入:
91254782354987012345978.
输出:
0:
11:
22:
33:
24:
35:
37:
38:
39:
3
3、输入一段文章(255个字符以内),求文章中单词的个数(相同单词只记一次,The和the认为是同一个单词,只记一次)。
4、请编写一个程序,让它能够计算两个200位以内的整数的和。
5、做一个加法器。
完成30000以内的加法,两个加数间用“+”连接,可以连加,回车表示式子输入完成;“#”表示结束运算,退出加法器。
看程序写结果
1.varch:
string;
i:
byte;
begin
readln(ch);
fori:
=1toord(ch[0])do
write(ch[i]:
2);
writeln
end.
输入:
MynameisTom.
输出:
2.vari:
integer;
begin
fori:
=1to13dowrite(chr(63+2*i):
4);
writeln;
fori:
=1to13dowrite(chr(92-2*i):
4);
writeln
end.
输出:
3.vara:
char;
begin
readln(a);
writeln('a:
',a);
writeln('succ(a):
',succ(a));
writeln('pred(a):
',pred(a));
writeln('ord(a):
',ord(a));
writeln('chr(ord(a)):
',chr(ord(a)));
writeln('chr(ord(a)+2):
',chr(ord(a)+2));
end.
输入:
e
输出:
4.vars:
integer;
ch:
char;
count:
array['a'..'z']ofinteger;
begin
forch:
='a'to'z'docount[ch]:
=0;
read(ch);
whilech<>'!
'do
begin
if(ch>='a')and(ch<='z')then
count[ch]:
=count[ch]+1;
read(ch)
end;
s:
=0;
forch:
='b'to'z'dos:
=s+count[ch];
writeln(s)
end.
输入:
WeareproudOFOURCOUNTRY!
输出:
5.vara:
array[1..100]ofstring[20];
s:
string;temp:
string[20];
i,j,k,n:
integer;
begin
readln(n);readln(s);i:
=1;j:
=0;k:
=0;
whilei<=length(s)do
ifs[i]in['0'..'9']then
begin
j:
=1;
whiles[i]in['0'..'9']do
begin
temp[j]:
=s[i];
inc(j);inc(i){inc(i)相当于i:
=i+1}
end;
temp[0]:
=chr(j-1);
k:
=k+1;
a[k]:
=temp
end
else
whiles[i]=''doinc(i);
fori:
=1ton-1do
forj:
=i+1tondo
if(a[i]+a[j])<(a[j]+a[i])then
begin
temp:
=a[i];a[i]:
=a[j];
a[j]:
=temp
end;
fori:
=1tondowrite(a[i]);
writeln
end.
输入:
481 792 39 79
输出: