Pascal字符串函数

求长度length

定义:function Length(S: String): Integer;

例子:

var

S: String;

begin

Readln (S);

Writeln(‘”‘, S, ‘”‘);

Writeln(‘length = ‘, Length(S));

end.

复制子串copy

定义: function Copy(S: String; Index: Integer; Count: Integer): String;

注意:S 是字符串类型的表达式。Index和Count是整型表达式。Copy 返回S中从Index开始,Count个字符长的一个子串。

例子:

var S: String;

begin

S := ‘ABCDEF‘;

S := Copy(S, 2, 3); { ‘BCD‘ }

end.

插入子串insert

定义:procedure Insert(Source: String; var S: String; Index: Integer);

注意:Source 是字符串类型的表达式。 S 是任意长度字符串类型变量。Index 是整型表达式。Insert 把 Source插在S中Index处。如果结果字符串的长度大于255,那么255之后的字符将被删除。

例子:

var

S: String;

begin

S := ‘Honest Lincoln‘;

Insert(‘Abe ‘, S, 8); { ‘Honest Abe Lincoln‘ }

end.

删除子串delete

定义:procedure Delete(var S: String; Index: Integer; Count:Integer);

注意:S 是字符串类型变量。 Index和Countare是整型表达式。Delete 删除S中从Index开始的Count个字符。如果Index大于S的长度,则不删除任何字符;如果Count大于S中从Index开始的实际字符数,则删除实际的字符数。

例子:

var

s: string;

begin

s := ‘Honest Abe Lincoln‘;

Delete(s,8,4);

Writeln(s); { ‘Honest Lincoln‘ }

Delete(s,9,10);

Writeln(s); { ‘Honest L‘ }

end.

字符串转为数值val

定义: procedure Val(S; var V; var Code: Integer);

在这里:

S 是由一系列数字字符构成的字符串类型变量;。

V 是整型或实型变量;

Code 是Integer型变量

注意:Val将S转为它的数值形式。

例子:

var s:string;I, Code: Integer;

begin

s:=‘1234‘;

val(s,i,code);

writeln(i); { 1234 }

end.

数值转为字符串str

定义: procedure Str(X [: Width [: Decimals ]]; var S:string);

注意:将数值X转成字符串形式。

例子:

var

S: string[11];

begin

Str(I, S);

IntToStr := S;

end;

begin

Writeln(IntToStr(-5322));

Readln;

end.

求子串起始位置pos

定义:function Pos(Substr: String; S: String): Byte;

注意:Substr和S字符串类型表达式。Pos在S中搜索Substr并返回一个integer值。这个值是Substr的第一个字符在S中的位置。如果在S中没有找到Substr,则Pos返回0。

例子:

var S: String;

begin

S := ‘ 123.5‘;

{ Convert spaces to zeroes }

while Pos(‘ ‘, S) > 0 do

S[Pos(‘ ‘, S)] := ‘0‘;

end.

字符完全串连+

定义:操作符+把两个字符串联在一起。

例子:

var s1,s2,s:string;

begin

s1:=‘Turbo ‘;

s2:=‘pascal‘;

s:=s1+s2; { ‘Turbo pascal‘ }

end.

字符串压缩空格串连-

定义:操作符-去掉第一个字符串最后的空格后,将两个字符串联在一起。

例子:

var s1,s2,s:string;

begin

s1:=‘Turbo ‘;

s2:=‘pascal‘;

s:=s1-s2; { ‘Turbopascal‘ }

end.

无奈

正版终于有用了,因为是品牌机,装的是正版XP,虽然是Home Edition的,可以从微软的网站下一个IE7,好象实际D版也可以安,可这也是第一次感受正版软件,卡巴斯基的KEY实在是不好找,就从网上找了据说世界第一的杀毒软件,名字都记不住,也不知道好使不,希望别像以前的诺顿,安了之后就没发现过毒(谁能相信??),在学校连个广告软件都杀不掉(无奈了0).


今天zhihong姐检查数学作业,结果很明显:补! 我也想补完,可是数量实在是巨大,我会坚持补的,能不能完成就不知道了,


在OIBH上问问题,结果半天没有回答,发现其中有一个帖子:

算了,还是不贴了,里面说在论坛里很多问问题的时候被”大牛”们说一说就扯远了,或者根本就没有回答

OI里除了个别的少数的大牛之外,大多数就是我这样的菜鸟了,问过几次问题,总体来说还是回答的少,其中有许多只是回答了一个算法的名称,我的智商怎么可能给了一个算法名字就会做,然后帖子里几乎都会有大牛灌水

大牛都不用着急,因为他们的智商都很高,一般也不用在论坛里问问题,靠自己就可以了,即便是问了,问题的数量也是少了又少,只是因为是大牛,起码表面上是这样,

zhouguyue说过,大牛太多了,我也没有明显的界定什么样是大牛,也许因为zhouguyue也是大牛,所以他才这么说,可是我需要的并不是大牛,只是一个可以回答问题的OIer,没有….

高精度计算

(1)高精度加法

运行的时候是倒着的,所以输出得倒着输出

a,b为两个相加的数,c为结果,应该也可以把原来的数加完的结果存在b里.

procedure add(a,b;var c);

{ a,b,c都为数组,a存储被加数,b存储加数,c存储结果 }

var i,x:integer;

begin

i:=1;

while (i<=a数组长度>0) or(i<=b数组的长度) do begin

x := a[i] + b[i] + x div 10; {i位相加并加上次的进位}

c[i] := x mod 10; {存储第i位的值}

i := i + 1; {位置指针变量}

end;

end;

(2)高精度减法

类似加法.

procedure minu (a,b;var c);

var i,x:integer;

begin

i:=1;

while (i<=a数组长度>0) or(i<=b数组的长度) do begin

x := a[i] – b[i] + 10+ x; {不考虑大小问题,先往高位借 10}

c[i] := x mod 10; {存储第i位的值}

x := x div 10 – 1; {将高位借掉的1减去}

i := i + 1; {位置指针变量}

end

end;

(3)高精度乘法

for i:=1 to lena do begin x:=0;

for j:=1 to lenb do begin {对乘数的每一位进行处理}

x := a[i]*b[j] + x div 10 + c[i+j-1]; {当前乘积+上次进位+原数}

c[i+j-1] := x mod 10;

end;

c[i+j]:= x div 10; {进位}

end;

lenc:=i+j;

while (c[lenc]=0) and (lenc>1) do dec(lenc);

(4)高精度除法,一般用不上

恩这个就不学了