va.*_*va. 4 delphi string pascal
我有一个使用字符串(Pascal)的程序.如果第一个字符不是字母,那么在读取字符串后,我需要删除所有第一个字符,直到第一个字符为一个字母.我曾尝试多次写它,但总是删除所有字符串或没有.
如果程序读取"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;
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它不起作用?你能用这个小程序帮我吗?谢谢.
And*_*and 13
你可以做到
function RemoveNonAlphaASCIIFromStart(const Str: AnsiString): AnsiString;
const
ALPHA = ['A'..'Z', 'a'..'z'];
var
i: Integer;
firstIndex: integer;
begin
result := '';
firstIndex := 0;
for i := 1 to length(Str) do
if Str[i] in ALPHA then
begin
firstIndex := i;
break;
end;
if firstIndex > 0 then
result := Copy(Str, firstIndex, length(Str));
end;
Run Code Online (Sandbox Code Playgroud)
或者,作为一个程序
procedure RemoveNonAlphaASCIIFromStart(var Str: AnsiString);
const
ALPHA = ['A'..'Z', 'a'..'z'];
var
i: Integer;
firstIndex: integer;
begin
firstIndex := 0;
for i := 1 to length(Str) do
if Str[i] in ALPHA then
begin
firstIndex := i;
break;
end;
if firstIndex > 0 then
Delete(Str, 1, firstIndex - 1)
else
Str := '';
end;
Run Code Online (Sandbox Code Playgroud)
对于更复杂的方法,也适用于Unicode Delphi,请参阅我对类似问题的回答.[这将从字符串中删除所有非alpha字符.]
那么,为什么你的算法不起作用呢?嗯,它应该工作,它适用于我.但请注意,它可以用稍微优雅的形式编写
const
ALPHA = ['A'..'Z', 'a'..'z'];
while true do
if (length(s) = 0) or (s[1] in ALPHA) then
break
else
delete(s, 1, 1);
Run Code Online (Sandbox Code Playgroud)
然而,OP的原始代码的一个问题是,如果s是空字符串,它将失败.的确,那时s[1]就不存在了.如果s完全由非字母字符组成(例如'!"#¤%),它将无法工作.