PASCAL 字符串有字母和数字 截取字母 将字符串里的数字转换出来 pascal 字符串函数 如何把字符转化为数字

作者&投稿:韩逃 (若有异议请与网页底部的电邮联系)
分开读字符串s或许更方便
var
ch :char;
a,b :longint;
c :string;
begin {一个一个字符去读}
read(ch);
c:='';
while ch<>' ' do
begin
c:=c+ch; {读一个,往c里面写一个}
read(ch);
end;

readln(a,b); {最后就可以放心地读数啦}
end.

非要先读一个字符串再分开的话,会麻烦些
var
s :string;
a,b :longint;
c :string;
begin
readln(s);
while s[1]=' ' do delete(s,1,1); {如果前面有空格通通干掉}
c:='';
while s[1]<>' ' do
begin
c:=c+s[1];
delete(s,1,1); {写一个,删一个}
end;
delete(s,1,1); {最后把名字后的空格删掉}

a:=0;
while s[1]<>' ' do
begin
a:=a*10+ord(s[1])-ord('0'); {这样多位数也不怕}
delete(s,1,1);
end;
delete(s,1,1);
b:=0; {b和a是一个思路}
while s<>'' do
begin
b:=b*10+ord(s[1])-ord('0');
delete(s,1,1);
end;
end.

var
s:string;
a:integer;
b:integer;
i,code:integer;
begin
readln(s);
while s[1]=' ' do delete(s,1,1);
while s[length(s)]=' ' do delete(s,length(s),1);
for i:=length(s) downto 1 do
if s[i]=' ' then break;
val(copy(s,i+1,length(s)-i),b,code);
s:=copy(s,1,i-1);
while s[length(s)]=' ' do delete(s,length(s),1);
for i:=length(s) downto 1 do if s[i]=' ' then break;
val(copy(s,i+1,length(s)-i),a,code);
s:=copy(s,1,i-1);
writeln(s,',',a,',',b);
end.

还是让我这个菜鸟来试试吧,说不定我的程序更易懂些,呵呵!
var
s,st:string;
a,i,l,m:integer;
b:boolean;(布尔型你应该知道吧)
j:array[1..100]of integer;(由于数字的个数不确定,我们只能设一个小数组)
begin
readln(s);
b:=false;l:=0;(b是判断有没有读入名字的)
for i:=1 to length(s) do (一个一个字符去判断,空格不一定要去理它)
begin
if (s[i]=' ')and(b<>true)
then begin
st:=copy(s,1,i-1);
b:=true;
end;
if s[i]in['0'..'9']
then begin
inc(l);
j[l]:=ord(s[i])-ord('0');
end;
end;
write(st,' ');
for i:=1 to l do
write(j[i],' ');
end.

这样就行了,但我没有用pos,在这里好像没作用,它是读取一个字符串在另一个字符串中的位置的函数。

如果数字是2位数或3位数,那么我这个程序就读不了了,到底是多大,你都没有说...........

我只能帮你到这里了。

可以一个一个的读入啊,
遇到空格操作元素下表加一
看看每个元素第一个字符是字母还是数字,就可以决定该元素的性质.

分开读字符串s或许更方便
var
ch
:char;
a,b
:longint;
c
:string;
begin
{一个一个字符去读}
read(ch);
c:='';
while
ch<>'
'
do
begin
c:=c+ch;
{读一个,往c里面写一个}
read(ch);
end;
readln(a,b);
{最后就可以放心地读数啦}
end.
非要先读一个字符串再分开的话,会麻烦些
var
s
:string;
a,b
:longint;
c
:string;
begin
readln(s);
while
s[1]='
'
do
delete(s,1,1);
{如果前面有空格通通干掉}
c:='';
while
s[1]<>'
'
do
begin
c:=c+s[1];
delete(s,1,1);
{写一个,删一个}
end;
delete(s,1,1);
{最后把名字后的空格删掉}
a:=0;
while
s[1]<>'
'
do
begin
a:=a*10+ord(s[1])-ord('0');
{这样多位数也不怕}
delete(s,1,1);
end;
delete(s,1,1);
b:=0;
{b和a是一个思路}
while
s<>''
do
begin
b:=b*10+ord(s[1])-ord('0');
delete(s,1,1);
end;
end.

pascal中这样把数字转换成字符串~

inttostr
strtoint

函数不能做为语句单独使用,多出现在条件和:=的右边位置;过程无返回值,必须做为语句单独使用
ABS(-5); 错
A:=ABS(-5); 对
FILLCHAR(W,SIXZEOF(W),0); 对
W:=FILLCHAR(W,SIXZEOF(W),0); 错
Pascal把常用的一些运算定义为系统标准函数,简称为标准函数;标准函数的名字都是预定义标识符;引用一个函数就称为函数调用,调用时只要在程序中写出某一函数名以及函数所需要的参数,系统就会自动运算并得出结果,例如:abs(-123)将返回123。
Pascal的标准函数共有17个,可分为四类:算术函数、转换函数、顺序函数及逻辑判断函数。
一、算术函数
(1)、求绝对值-ABS:是英文单词absolute(绝对)的缩写,ABS(x)表示求x的绝对值
例如:PROGRAM EX;
Var a:integer;b:real;
BEGIN
a=-34.5;
b=234.5;
write(abs(a):5:1,' ',abs(b):5:1); {将输出 34.5 234.5}
readln;
END.
(2)、反正切函数-ARCTAN:ARCTAN(x)表示求x的反正切函数值,返回值为real型
例如:PROGRAM EX;
Var a:integer;b:real;
BEGIN
a=1;
b=1.0;
write(abs(a):6:4,' ',abs(b):6:4); {将输出 0.7854 0.7854}
readln;
END.
(3)、余弦函数-COS、正弦函数-SIN:COS(x)表示求x的余弦值;SIN(x)表示求x的余弦值。这里的x必须为弧度,不能直接使用角度单位的量。如果x为角度数,可以用后面的方式转换:x*3.14/180
(4)、指数函数-EXP、自然对数函数 -LN:EXP是英文单词exponent(指数)的缩写,EXP(x)表示求以e为底x为指数的函数值 ,即EX;LN是英文单词logarithrm(自然对数)的缩写,LN(x)表示求x的自然对数,即LOGeX
(5)、平方函数-SQR、正平方根函数-SQRT:SQR是英文单词square(平方)的缩写;SQRT是英文单词square root(平方根)的缩写
几点说明:Pascal中无幂运算,要求XY可以用后面的公式:XY=eYLNX (X>0)
求常用对数可用公式:logX=lnX/ln10。
e≈2.71828
如:求三次根号下X,可以表示为EXP(1/3*LN(X))

二、类型转换函数
(1)、取整数函数-TRUNC:如TRUNC(7.8)的值为7,TRUNC(-6.1)的值为-6
(2)、四舍五入函数-ROUND:如ROUND(7.8)的值为8,ROUND(-6.1)的值为-6
(3)、序号函数-ORD:返回参数的对应的序号;若参数为字符,则返回其ASCII码(A的ASCII码为,a的ASCII码为97)值,如ORD('B')的值为66;若参数为BOOLEAN,则ORD(TRUE)的值为1,ORD(FALSE)的值为0
(4)、字符函数-CHR:返回序号所对应的字符,与ORD互为反函数;如CHR(66)的值为'B'
注意TRUNC与ROUND的区别

三、顺序函数
(1)、前趋函数-PRED:返回参数的前一个数据,若参数为第一项,则函数无意义
(2)、后继函数-SUCC:返回参数的后一个数据,若参数为最后一项,则函数无意义

四、逻辑判断函数
(1)奇偶判断函数-ODD:判断参数的奇偶性,当参数为偶数时,函数值为FALSE;当参数为奇数时,函数值为TRUE
(2)、文件尾函数-EOF:判断文件位置指针是否指向文件结束符,是则为TRUE,反之为FALSE
(3)、行结束函数-EOLN:判断文件位置指针是否指向换行符符,是则为TRUE,反之为FALSE

五、与字符串相关的函数和过程函数和过程名 功 能 说 明
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个字符位置处插入子串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为整型,是过程
FILLCHAR(S,N,CH) 给S填充N个相同的CH 用于初始化数组或字符串,N常用SIZEOF(S)代替,是过程
注:关于字符串的几点说明
①空串表示为'',其长度为0,不等于含有一个空格的串' ',它的长度为1;如:A:='';就是将A字符串置空
②FILLCHAR可以用于字符串变量和任何类型数组变量的初始化,比如:
FILLCHAR(A,SIZEOF(A),0) 将整型数组A全置0
FILLCHAR(B,SIZEOF(B),TRUE) 将布尔型数组B全置0
FILLCHAR(C,SIZEOF(C),'A') 将整型字符串C全置'A'
其中SIZEOF是返回变量的空间,以变量的基类型为单位