-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 (1 文字あたり 2 バイト) です。Delphi の以前のバージョンでは、そうではありません(1 文字あたり 1 バイト)。

于 2013-07-13T19:40:03.690 に答える