Pascal 在字符串中分隔数字。帕斯卡

Pascal 在字符串中分隔数字。帕斯卡,pascal,lazarus,Pascal,Lazarus,我有个问题。我只学了几个星期的帕斯卡语,我知道的不多。我必须写一个程序,从输入的3个数字中计算出一些东西。问题是所有3个都需要在一次编辑中输入,中间有空格。所以基本上我有一个字符串“number”。如何将这些数字分隔为3个单独的字符串,以便将它们转换为整数。使用复制函数是一种方法。很抱歉设置了格式,我无法理解如何在这些答案部分正确粘贴代码段 function TMyForm.Add( anEdit : TEdit ) : integer; var Idx : integer; T

我有个问题。我只学了几个星期的帕斯卡语,我知道的不多。我必须写一个程序,从输入的3个数字中计算出一些东西。问题是所有3个都需要在一次编辑中输入,中间有空格。所以基本上我有一个字符串“number”。如何将这些数字分隔为3个单独的字符串,以便将它们转换为整数。

使用复制函数是一种方法。很抱歉设置了格式,我无法理解如何在这些答案部分正确粘贴代码段

function TMyForm.Add( anEdit : TEdit ) : integer;
var
    Idx : integer;
    TempString : string;

function GetNext : integer;
begin
    result := result + StrToInt( copy( TempString, 1, Idx - 1 ) );
    TempString := copy( TempString, Idx + 1, MAXINT );
end;

begin
    result := 0;
    TempString := anEdit.Text;

    repeat
        Idx := pos( ' ', TempString );
        if Idx > 0 then
        result := GetNext;
    until Idx = 0;

    if trim( TempString ) <> '' then
        //this is the last piece of it then
        result := result + StrToInt( trim( TempString ) );
end;
函数TMyForm.Add(anEdit:TEdit):整数;
变量
Idx:整数;
TempString:string;
函数GetNext:整数;
开始
结果:=result+stroint(复制(TempString,1,Idx-1));
TempString:=复制(TempString,Idx+1,MAXINT);
结束;
开始
结果:=0;
TempString:=anEdit.Text;
重复
Idx:=位置(“”,TempString);
如果Idx>0,则
结果:=GetNext;
直到Idx=0;
如果trim(TempString)'
//这是最后一块了
结果:=result+stroint(trim(TempString));
结束;

您还需要注意输入的值是数字而不是字母,通常使用try..除了块。

在pascal中,有从控制台检索输入的内置过程

获取数值输入的最简单方法是使用
Read()/ReadLn()
,这也可以将字符串转换为数值:

procedure GetNumbers(var x,y,z: Integer); 
begin 
  WriteLn('Enter three numbers separated with space and then press enter.');
  ReadLn(x,y,z); 
end;

这里,
ReadLn()
检测用空格分隔的三个输入,等待[Enter]键并将整数值分配给x、y、z变量。

过程GetNumbers(变量x、y、z:integer);begin WriteLn('输入三个用空格分隔的数字,然后按Enter键');ReadLn(x,y,z);结束@LURD如果您能给出正确的答案,我很乐意为您解答。目前唯一的答案并不是对这个问题的真正回答,而且过于复杂。@TomBrunberg,谢谢你鼓励我千方百计地回答:-)但是在“一次编辑”中提到的OP,我认为Lazarus IDE,readln在那种环境下不起作用,不是吗?@juus,来自IDE,您可以编译控制台程序和GUI程序。大多数带pascal标记的问题都是需要控制台输出的学校作业。stackoverflow联机帮助解释了如何正确格式化谢谢,这帮了大忙。它也适用于数组吗?是:
类型TMyArr=Integer的数组[0..2];程序编号(var arr:TMyArr);begin WriteLn('输入三个用空格分隔的数字,然后按Enter键');ReadLn(arr[0],arr[1],arr[2]);结束如果有n个元素?类似于数组[1..n],其中n最多可以是100000。不太可能在一个编辑行中手动输入100000项。