如何复制ANSI字符串数组,以便我可以获得另一个ANSI字符串数组

时间:2017-10-15 10:06:22

标签: string pascal freepascal

我想知道是否存在切片Array of AnsiString并返回Array of AnsiString的函数。 Copy函数返回Array of String,所以我碰巧在网上搜索另一个解决方案,但我找不到任何内容。

我们有解决方案吗?

我正在使用Free Pascal。

1 个答案:

答案 0 :(得分:4)

复制会将所有array of X复制到另一个array of X.如果XAnsiString,则会将其复制(或切片)为array of AnsiString

以下证明项目显示结果是array of AnsiString,因为它解决了每个人和#34;字符"。如果结果是UnicodeString,您将只看到第一个字符(例如'One'将是单个"字节" 'O'#0'n'#0'e'#0#0#0,因此循环将在'O')。

program Project1;

uses
  SysUtils;

type
  TAnsiStringArray = array of AnsiString;

procedure Main;
var
  A, B: TAnsiStringArray;
  I: Integer;
  P: PAnsiChar;
begin
  A := TAnsiStringArray.Create('Zero', 'One', 'Two', 'Three');

  { Plain Copy, nothing special: }
  B := Copy(A, 1, 2);  { Copies 'One' and 'Two' }

  for I := Low(B) to High(B) do
  begin
    P := PAnsiChar(B[I]);
    while P^ <> #0 do
    begin
      Write(P^, '-');
      Inc(P);
    end;
    Writeln;
  end;
end;

begin
  Main;
  Readln;
end.

输出:

O-n-e-
T-w-o-

所以没有必要做任何特别的事情。只需按原样使用Copy即可。

Windows上的FPC 3.0.0。