给定一个单词或一组字符,如何只取一个部分并处理其余部分

Given a word or set of characters how to only take one part and dispose the rest

提问人:Varo 提问时间:9/12/2023 最后编辑:DharmanVaro 更新时间:9/29/2023 访问量:165

问:

我使用 Free Pascal,我必须为大学课程(编程入门课程)完成任务。 我们不允许使用 Free Pascal 中的某些单词,例如 、 和其他一些单词,因此我的 for 字符是 。stringbreakvarchar

基本上,我需要从一个单词(或一组字符)中获取每个字母并做一些事情(在这种情况下,将 ASCII 值添加到每次添加字母时都会增加的数字中)。

当我们找到第一个点 () 时,我无法停止循环。理想情况下,如果用户输入,我只需要完成字母、和(第一个字母之前的字母)的工作,并“在”之后“处理文本的其余部分,因为不会使用while.house.dog.whilehouse..

我已经读到和 之间存在一些内部差异,但无法弄清楚这是否会影响代码和我得到的错误ReadReadLn

我在下面尝试了这段代码,并且在输入单词后不要停止。继续让我添加单词,直到出现运行时错误

program testingw;
var 
  myText : char;
  myResult : Integer;

begin
  writeLn ('enter your text');
  readLn (myText);

  while myText <> '.' do
  begin
    Read(myText);
    if myText <> '.' then
    begin
      myResult := myResult * 125 + ord(myText);
      WriteLn (myText);
    end;
  end; { while }
end.
弗里帕斯卡

评论

0赞 Tom Brunberg 9/14/2023
感谢您删除您的“非答案”答案。错误 201 是范围检查错误。您可能需要阅读有关类型的此内容integer
0赞 Scooter 10/12/2023
将循环内的 Read 语句移动到循环的底部。正如下面的答案所说,上层 Readln 需要是一个 Read

答:

1赞 Tom Brunberg 9/12/2023 #1

首先对变量命名的评论:一个名为 var 的 var 给了我至少几个句子的文本的心理图景。似乎不适合只适合一个角色。 对于一个角色来说,这是合乎逻辑的选择。myTextmyChar

取代

  writeLn ('enter your text');
  readLn (myText);

  writeLn ('enter your text');
  read(myText);    // execution remains here until [Enter],
                   // entered chars are stored in input buffer
                   // myText refers to first char in buffer

while

  while myText <> '.' do
  begin
    myResult := myResult * 125 + ord(myText);
    write(myText);
    read(myText);  // Fetch next char in buffer
  end;

但请注意,这是使用 Delphi 测试的。我目前无法与 FP 验证。

评论

0赞 Scooter 10/12/2023
它适用于 Free Pascal,但原始代码的 Read/Readln 语句不正确。第一个字符将与呈现的逻辑一起删除。必须初始化一个 Read() 或 myText,并将第二个 Read 移动到循环的底部。