gpt4 book ai didi

string - 删除 Pascal 字符串中的短词

转载 作者:行者123 更新时间:2023-12-03 19:13:36 27 4
gpt4 key购买 nike

我需要删除以点结尾的字符串中的短词(短于三个符号)。之后显示没有这些单词的字符串。

所以我们需要一个来自用户的字符串作为这样的输入:“这是一个男人输入的简单字符串。”在这个字符串中,程序应该删除每个短于三个符号的单词。在我们的字符串中,这些是:“is, a, a”。所以输出应该是“This simple string man types”。

这是我的编程类(class)的 Pascal/Delphi 任务。

几天来我一直在考虑这个简单的问题,但显然没有办法解决它并寻求您的帮助。我为主要部分尝试了不同的循环,基本上是在空格之间找到少于三个符号的序列。我试图调试它很长一段时间,但没有结果。

我用 Lazarus 1.6.2、FPC 3.0 和 Mac OS X v10.11 (El Capitan)。我的代码如下:

 VAR
UserString: string;
i, n: byte; // Counters for the symbols in the string. 'i' counts every symbol.
again: boolean; // In case we need to repeat the program again
UserAnswerRepeat: char;
label repeat_again;

BEGIN
again:=false;
repeat_again: // Label to repeat the program
Writeln('Enter your string (ended by a dot):');
Readln(UserString);

// MAIN LOOP:
n:=1; // 'n' counts symbols in the words
for i:=1 to length(UserString) do
begin
while (UserString[i] <> ' ') do inc(n); // Here I have Range Check Error. Don't know how to get rid of it.
if (UserString[n] <> ' ') and (n<3) then
begin
delete(UserString, i-n, n);
n:=1
end;
end;

Writeln('The result is: ', UserString);

Writeln('Do you want to repeat the program? (Y/N)');
Readln(UserAnswerRepeat);
if (UserAnswerRepeat = 'Y') or (UserAnswerRepeat = 'y') then
again:=true;
if (again = true) then
goto repeat_again;
END.

另一个小问题是:如何让控制台应用程序在成功运行后重复?在这里,我使用了标签和 goto。也许还有另一种好方法可以再次做到这一点?

最佳答案

一个 for控制变量的循环开始值和结束值只计算一次。您将结束值设置为字符串的长度。但是,在循环期间,您从字符串中删除部分,因此结束值超过了字符串的结尾。尝试使用 while循环或 repeat .. until环形。

错误的实际原因在该行中

  while (UserString[i] <> ' ') do inc(n);

循环会持续多久?什么结束了循环?

您还需要重新考虑如何使用 n 计算字符。 .

关于string - 删除 Pascal 字符串中的短词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43724386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com