字符与字符串处理

一、字符与字符串类型的使用

Var 字符变量名:char;

字符类型是一个有序类型,字符的大小顺序按ASCII码的大小决定。相关的函数有succ、pred、ord、chr等。

VAR A: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.

例:按字母表顺序和逆序每隔一个字母打印。即打印出:

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

for i:=1 to 13 do write(chr(63+2*i):4);writeln;

for i:=1 to 13 do write(chr(92-2*i):4);writeln

字符串

〖语法分析〗

字符串用于存放整批的字符数据。通常编程中使用字符串存放字符化了的数字数据。如高精度运算时存放操作数和运算结果。字符串可以看作是特殊的字符串数组来处理。当然,它也有自已的特点。下面是字符串定义的格式:
var s: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是错误代码

 

var s: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 := 'Honest Abe Lincoln';
Delete(s,8,4);
Writeln(s); { 'Honest Lincoln' }

Insert(s1, S, w)

过程

将 s1插到 s中第 w位

 

S := 'Honest Lincoln';
Insert('Abe ', S, 8); { 'Honest Abe Lincoln' }

Pos(c, S)

函数

求字符 c在 s中的位置

整型

S := ' 123.5';
i :=Pos(' ', S);{i 的值为 1}

+

运算符

将两个字符串连接起来

 

s1:='1234';
s2:='5678';
s:=s1+s2;{'12345678'}

[例6、3]把26个英语字母正向、逆向打印出来。
Const s:string[26]=’abcdefghijklmnopqrstuvwxyz’;
Var t:string[26];
I:integer;
Begin
t:=’                          ‘;           {共26个空格}
For I:=1 to 26 do begin
T[I]:=s[27-I];
End;
Writeln(s);
Writeln(t);
End.
[例6、4]找出所有的四位回文数:(回文数就是一个数从左往右读与从右往左读都是同一个数)
var s:string[4];
n:integer;
begin
for n:=1000 to 9999 do begin
str(n,s);
if (s[1]=s[4]) and (s[2]=s[3]) then write(n:6);
end;
end.
或者用如下程序:
var n:integer;
s,t:string;
begin
for n:=10 to 99 do begin
str(n,s);
t:=s+s[2]+s[1];
write(s:6);
end;
end.
上述两个程序,哪个快,哪个慢?
posted on 2008-11-17 13:47  sandboy  阅读(260)  评论(0)    收藏  举报