探しているのはヌル文字値です。長さがゼロのエンティティである空の文字列を使用しようとしています。しかし、長さがゼロの文字はありません。探しているヌル文字値は単に存在しません。
Length(mystring)
これを確認する別の方法は、ループの最後にあるものを検討することです。でどの文字を割り当ててもmystring[k] := ...
、 の長さmystring
は変更されません。
したがって、既存の文字列を変更する代わりに、新しい文字列を作成できます。例えば:
var
new: string;
len: Integer;
....
SetLength(new, Length(mystring));
len := 0;
for i := 1 to Length(mystring) do
begin
if not (mystring[i] in ['a','e','i','o','u']) then
begin
inc(len);
new[len] := mystring[i];
end;
end;
SetLength(new, len);
mystring := new;
または、次の呼び出しを繰り返し行うこともできますStringReplace
。
mystring := StringReplace(mystring, 'a', '', [rfReplaceAll]);
mystring := StringReplace(mystring, 'e', '', [rfReplaceAll]);
//etc.
このバージョンの使用StringReplace
は、最初のアプローチよりも遅くなります。
さらに別のアプローチは、その場で運用することです。
var
len: Integer;
....
len := 0;
for i := 1 to Length(mystring) do
begin
if not (mystring[i] in ['a','e','i','o','u']) then
begin
inc(len);
mystring[len] := mystring[i];
end;
end;
SetLength(mystring, len);