String Delphi拆分合并字符串不带分隔符?

String Delphi拆分合并字符串不带分隔符?,string,algorithm,delphi,String,Algorithm,Delphi,您好,我正在处理字符串拆分合并,如下所示: Button1.click...etc. var s:String; ars:array[1..10] of String; i:integer; begin ars[1]:='0'; ars[2]:='012'; ars[3]:='23'; ars[4]:='458'; ars[5]:='022'; // These values are example of. ars[6]:='001'; ars[7]:='0125'; ars[8]:='250'

您好,我正在处理字符串拆分合并,如下所示:

Button1.click...etc.
var
s:String;
ars:array[1..10] of String;
i:integer;
begin
ars[1]:='0';
ars[2]:='012';
ars[3]:='23';
ars[4]:='458';
ars[5]:='022'; // These values are example of.
ars[6]:='001';
ars[7]:='0125';
ars[8]:='250';
ars[9]:='859';
ars[10]:='9';

 for i:=1 to 10 do
begin

   s:=s+ars[i];

end;
//Finally I get string like this example: '01123641054257867420..etc..'
end;
如何将最后一个字符串拆分回去?我不知道ars数组值的长度。正如你所看到的,有些是4字节,3字节,2字节。。我把它全部合并,然后我想再拆分一次。。我该怎么做?有什么想法或算法吗?我在谷歌上搜索了一下,但什么也没找到。。谢谢

@Jens Borrisholt我的代码是:

unit Unit1;

interface



uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;



  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TMyStrings }
{$R *.dfm}



type TMyStrings = class(TStringList)
  protected
    function GetTextStr: string; override;
  end;

function TMyStrings.GetTextStr: string;
var
  Element: String;
begin
  Result := '';
  for Element in Self do
    Result := Result + Element;
end;

end.

问题在哪里

没有内置的功能可以做到这一点,因为您会丢弃每个字符串长度的信息。所以这些信息必须存储在某个地方

您可以使用TStringList子代:

接口

实施

以及如何使用它:

procedure TForm5.FormCreate(Sender: TObject);
var
  MyStrings : TMyStrings;
begin
  MyStrings := TMyStrings.Create;

  MyStrings.Add('0');
  MyStrings.Add('012');
  MyStrings.Add('23');
  MyStrings.Add('458');
  MyStrings.Add('022'); // These values are example of.
  MyStrings.Add('001');
  MyStrings.Add('0125');
  MyStrings.Add('250');
  MyStrings.Add('859');
  MyStrings.Add('9');

  Caption := MyStrings.Text;
  FreeAndNil(MyStrings);
end;

有了它,您就可以将列表作为一个连接字符串,并且您仍然拥有关于每个字符串的原始信息

使用分隔符分隔值Show是否可以在不知道拆分位置的情况下将字符串abcdefghijklmno拆分回原始部分?必须存储每个零件的长度或使用分隔符,否则不能使用分隔符。没有分隔符。当你做s:=s+ars[i];,结果不包含关于构建它所依据的字符串的任何信息,因为ars[]内容有大量不同的值,这将产生相同的结果:就其本身而言,它不是可逆转换。因此,如果您以后需要恢复该信息,您需要将其存储在某个地方,或类似的地方。保留ars[]数组是一种方法,如果将实现装扮成TStringlist子代,则对涉及的原则没有影响。这个问题很奇怪,因为接受的答案不符合指定的约束1是的,你可以,你可以只要求mystring[3]你还可以访问元素4我能用异或吗?ı怎么做?ı在哪里写代码。我在接口下写了第一个代码,我看到了错误。我在实现中写了第二个代码,我看到了错误。我将在哪里写这些代码。谢谢你。这个问题的唯一答案是所要求的是不可能的
{ TMyStrings }

function TMyStrings.GetTextStr: string;
var
  Element: String;
begin
  Result := '';
  for Element in Self do
    Result := Result + Element;
end;
procedure TForm5.FormCreate(Sender: TObject);
var
  MyStrings : TMyStrings;
begin
  MyStrings := TMyStrings.Create;

  MyStrings.Add('0');
  MyStrings.Add('012');
  MyStrings.Add('23');
  MyStrings.Add('458');
  MyStrings.Add('022'); // These values are example of.
  MyStrings.Add('001');
  MyStrings.Add('0125');
  MyStrings.Add('250');
  MyStrings.Add('859');
  MyStrings.Add('9');

  Caption := MyStrings.Text;
  FreeAndNil(MyStrings);
end;