字符串转换(100分)

  • 主题发起人 主题发起人 小玲儿
  • 开始时间 开始时间

小玲儿

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样将一个字符串a:='abc ;ddd; aslkd, aaa'拆分成4个字符串分别为'abc','ddd','aslkd','aaa'
 
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
temp: string;
i: integer;
begin
s := 'abc ;ddd; aslkd, aaa';
temp := '';
for i := 1 to length(s) do
if (s <> ';') and (s <> ',') then
temp := temp + s
else
begin
if trim(temp) <> '' then
showmessage(trim(temp)); //把trim(temp)放到你想要的地方。
temp := '';
end;
if trim(temp) <> '' then
showmessage(trim(temp)); //把trim(temp)放到你想要的地方。
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
StringTemp:TStringList;
begin
StringTemp:=TStringList.Create;
try
StringTemp.CommaText:=StringReplace('abc ;ddd; aslkd, aaa',';',',',[rfReplaceAll]);
for i:=0 to (StringTemp.Count-1) do
StringTemp.Strings:=Trim(StringTemp.Strings);
Memo1.Lines.CommaText:=StringTemp.CommaText;
ListBox1.Items.CommaText:=StringTemp.CommaText;
finally
StringTemp.Free;
end;
end;
 
看起来没有291005中calvin的回答先进,但速度快得多。
 
其实字符串分析的程序以前谈过几个的,查一下就行
如果追求效率的话,限定字符集如:'a'..'z',一遍扫描就完成了
 
恰好是昨天招聘的题目
界面设置为一个EDIT1,一个ListBox1,一个Bottom1
procedure TForm1.Button1Click(Sender: TObject);
var
TempArr:String[255];
TempStr:String;
I:Integer;
begin
TempArr:=Edit1.Text;
TempStr:='';
ListBox1.Items.Clear;
for I:=1 to Length(TempArr) do begin
if (TempArr<>';')and(TempArr<>',') then
TempStr:=TempStr+TempArr
else begin
ListBox1.Items.Add(TempStr);
TempStr:='';
end;
end;
if TempStr<>'' then
ListBox1.Items.Add(TempStr);
end;

 
我觉得calvin的答比较好
 
我的回答,仅仅是懒人的答案,效率并不是太好。
如果是要进行大量的数据,我还是不建议用,如果速度要求不高,那就无所谓。
 
应该考虑到,如果字符串中还可能有其他的诸如'.','?'等等不需要的成分
所以,最好还是用字符集扫描的方法
把daiqingbo的回答稍微改了一下:
{注,trim为删除字符串两端的空格,因为该字符集内没有空格,所以就用不着trim了}
const
myset:set of '0'..'z' = ['0'..'9','A'..'Z','a'..'z'];
var
s: string;
temp: string;
i: integer;
begin
s := 'abc ;ddd; aslkd, aaa';
temp := '';
for i := 1 to length(s) do
if s in myset then
temp := temp + s
else
begin
if trim(temp) <> '' then
showmessage(temp); //把temp放到你想要的地方。
temp := '';
end;
if temp <> '' then
showmessage(temp); //把temp放到你想要的地方。
end;
 
归根到底还得扫描, 只不过 delphi 提你实现了一些,
自己写比较顺手.
 
习惯不同而已,delphi 替你实现,有何不好?
 
接受答案了.
 
后退
顶部