您正在寻找的是一个空字符值。您正在尝试使用空字符串,它是一个长度为零的实体。但是没有长度为零的字符。您正在寻找的空字符值根本不存在。
另一种看待这一点的方法是考虑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);