2011-09-20 77 views
2

如何将一行文本(例如,Hello there*3)分割成一个数组? *之前的所有内容都需要添加到第一个元素,并且*之后的所有内容都需要添加到第二个元素。我相信这是可能的。我需要后来想起这与第一和第二项必须彼此相关如何在特定字符处分割字符串?

我用Delphi 7

+0

你的“一个例子线'看起来更像*三条线,对我来说。也许你应该澄清一下输入和预期输出是什么。 –

+1

您使用的是哪个版本的delphi? – RRUZ

+1

你说的是'多维数组',但你的例子表明你只对一维数组感兴趣...... –

回答

4
type 
    TStringPair = array[0..1] of string; 

function SplitStrAtAmpersand(const Str: string): TStringPair; 
var 
    p: integer; 
begin 
    p := Pos('&', Str); 
    if p = 0 then 
    p := MaxInt - 1;  
    result[0] := Copy(Str, 1, p - 1); 
    result[1] := Copy(Str, p + 1); 
end; 

或者,如果你不进入魔力,

function SplitStrAtAmpersand(const Str: string): TStringPair; 
var 
    p: integer; 
begin 
    p := Pos('&', Str); 
    if p > 0 then 
    begin 
    result[0] := Copy(Str, 1, p - 1); 
    result[1] := Copy(Str, p + 1); 
    end 
    else 
    begin 
    result[0] := Str; 
    result[1] := ''; 
    end; 
end; 

如果,对于一些完全陌生而略显怪异的原因,需要一个过程,不是一个函数,然后做

procedure SplitStrAtAmpersand(const Str: string; out StringPair: TStringPair); 
var 
    p: integer; 
begin 
    p := Pos('&', Str); 
    if p > 0 then 
    begin 
    StringPair[0] := Copy(Str, 1, p - 1); 
    StringPair[1] := Copy(Str, p + 1); 
    end 
    else 
    begin 
    StringPair[0] := Str; 
    StringPair[1] := ''; 
    end; 
end; 
+0

@David:这就是为什么我只是在你发表评论之前就修复它的原因! –

+0

这真的很让人伤心,特别是与你只需要一行代码的Python极其便携的解决方案相比:''你好* 3'.split('*')' –

+1

@David:我想我正在为打高尔夫球... –