你可以做
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