我有一个处理字符串的程序(使用Pascal语言)。在读取字符串后,如果第一个字符不是字母,则需要删除所有第一个字母之前的字符,直到第一个字母为止。我已经尝试写了几次,但总是会删除整个字符串或什么都不删除。
如果程序读取"123%^&abc",则结果应该是"abc"。 在ASCII表中,字母的编码范围为65..90和97..122。
以下是我的代码:
如果程序读取"123%^&abc",则结果应该是"abc"。 在ASCII表中,字母的编码范围为65..90和97..122。
以下是我的代码:
variables a: set of 65..90;
b: set of 97..122;
-------------------
bool:=false;
While (bool=false) do
begin
Writeln(s[1]);
If (Ord(s[1]) in a) or (Ord(s[1]) in b) then
begin
bool:=true;
end else
delete(s,1,1);
end;
我不明白为什么它不起作用? 你能帮我处理一下这个小程序吗?谢谢。
const a = [65..90]; b = [97..122]
。我假设OP已经这样做了,但你可能是对的。也许OP编写了var a: set of 65..90; b: set of 97..122
,它将a
和b
声明为变量,可以通过后续赋值存储指定范围内的任何整数集。对于OP的教训可能是在问题中包含确切不起作用的代码,而不是伪代码!(65..90
是所谓的“子范围类型”;因此,set of 65..90
类似于set of byte
,但更挑剔一些。) - Andreas Rejbrandbool
,而不是(例如)completed
?Bool 可能会被混淆为类型名称,因此对于其他任何事物来说都是一个糟糕的名称。接下来,你为什么不直接写while not completed do
?这样会更易读,也更能传达你的意图。 - JensG