你可以做
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;
,或者作为一个过程
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;
对于更复杂的方法,这也与Unicode的德尔福工作,看到my answer to a similar question。 [这消除了从字符串中的所有非字母字符。]
那么,为什么没有你的算法的工作?那么,它应该可以工作,并且对我有用。但是请注意,但是,可以写在稍微更优雅的形式
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);
的一个问题,与OP的原代码是,如果s
为空字符串,它会失败。的确,那么s[1]
不存在。它不会工作,要么如果s
完全由非字母字符(例如'!"#¤%
)。
这是一段时间,因为我没有做一些帕斯卡,但你的程序似乎对我来说很好,你可以粘贴给定字符串的输出吗?或者最终的错误 – krtek
而且,我一如既往地添加delphi标签,以便您的问题得到真正的关注! –
我在该程序中看不到任何错误。我不喜欢它的风格,但我没有理由认为它不应该按照预期工作。 – CodesInChaos