-3

我有以下带有此代码的字符串:

test:='{test}test{test}';

我的想法是修改它以使其如此

{ t e s t } t e s t  { t e s t }

我需要的是所有文本都有一个字母空间

谁能解释一下我是怎么做的?

4

1 回答 1

2

以下函数可以解决问题:

function SpaceString(const S: string): string;
var
  i: Integer;
begin
  SetLength(result, 2*Length(S));
  for i := 1 to Length(S) do
  begin
    result[2*i - 1] := S[i];
    result[2*i] := #32;
  end;
end;

如果你不想要最后的空格:

function SpaceString(const S: string): string;
var
  i: Integer;
begin
  SetLength(result, 2*Length(S) - 1);
  for i := 1 to Length(S) do
    result[2*i - 1] := S[i];
  for i := 1 to Length(S) - 1 do
    result[2*i] := #32;
end;

或者干脆截断 ( SetLength(result, Length(result) - 1)) 最后在第一个版本中创建的字符串。

也就是说,我以某种方式怀疑您的真正问题是关于字符编码。t h i s实际上,假设原始字符串不包含任何多字节字符,则Unicode (UTF-16) 字符串将看起来像解释为 ASCII(或 ANSI)。[当然,在这种情况下,“空格”实际上不是空格 ( #32),而是 NUL 字符 ( #0)。]

如果真的是这样,那么您可以完全忘记我上面的功能。相反,您应该正确对待编码。如果您使用的是 Delphi 2009+,则string类型为 Unicode(每个字符两个字节);在早期版本的 Delphi 中,它不是(每个字符一个字节)。

于 2013-07-13T19:40:03.690 回答