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;