发布网友 发布时间:2022-04-22 11:10
共3个回答
热心网友 时间:2023-10-12 01:27
解决了没有啊?
1,数组
type
tstringarray = array of string;//由于function的返回类型只接受一个单词的类型,在这里把array of string重命名为tstringarray,下边的所有array of string均可以用tstringarray来替换。
function splitstr(str: string): tstringarray;
var
tmpstr, s1, s2: string;
i, j, k, strcount: integer;
begin
j := 1;
strcount := 0;
k := 0;
tmpstr := trim(str);
for i := 1 to length(tmpstr) - 1 do
begin
s1 := tmpstr[i + 1];
s2 := tmpstr[i + 2];
if (s1 = ' ') and (s2 <> ' ') or (s2 = #0) then
begin
inc(strcount);
setlength(result, strcount);
result[strcount - 1] := copy(tmpstr, k, j);
k := i + 2;
j := 1;
end
else
inc(j);
end;
end;
procere TForm1.Button1Click(Sender: TObject);
var
astr: tstringarray;
i: integer;
str: string;
begin
astr := splitstr(edit1.Text);
for i := low(astr) to high(astr) do
begin
str := str + astr[i];
listbox1.Items.Add(str);
end;
end;
2,用tstringlist来解决。
-------------------------------------------------
function splitstr(str: string; split: string = ' '): tstringlist;
var
tmp: string;
i: integer;
begin
tmp := trim(str);
for i := length(tmp) downto 1 do
if tmp[i - 1] = ' ' then
insert(',', tmp, i);
result := tstringlist.Create;
result.DelimitedText := tmp;
result.Delimiter := ',';
end;
procere TForm1.Button1Click(Sender: TObject);
var
strlist: tstringlist;
i: integer;
begin
strlist := tstringlist.Create;
strlist := splitstr(edit1.Text);
for i := 0 to strlist.Count - 1 do
listbox1.Items.Add(strlist.Strings[i]);
end;
热心网友 时间:2023-10-12 01:27
procere TForm1.Button1Click(Sender: TObject);
var
str,str1: string;
i,j: integer;
begin
Str:='AAA BB CCC DD';
Str:=trim(Str); //去除尾部空格。
str1:='';
For i:=1 to length(Str) do
begin
if (str[i]=' ') and (str[i+1]<>' ') then
begin
for j:=1 to i do
str1:=str1+str[j];
memo1.Lines.Add(str1);
str1:='';
end;
end;
Memo1.Lines.Add(str);
end;
热心网友 时间:2023-10-12 01:27
好吧,重新改了一下,试试下面这段,应该完全可以满足你的要求.
结合了deadowl判断最后一个空格的方法 (if str='') and (str[i+1]<>'').
代码如下:
function Parsestr(str:string):TStringList;
var
tempstr:string;
temppos:integer;
i:integer;
begin
if str='' then
begin
exit;
end;
result:=tstringlist.Create;
str:=trim(str);
temppos:=0;
for i:=0 to Length(str) do
begin
if (str[i]=' ')and(str[i+1]<>' ') then
begin
tempstr:=Copy(str,temppos,i-TEMPPOS);
tempstr:=Trim(tempstr);
Result.Add(tempstr);
temppos:=i;
end;
if i=Length(str) then
begin
tempstr:=Copy(str,temppos,i);
tempstr:=Trim(tempstr);
result.Add(tempstr);
end;
end;
end;
以上函数解析每一个符合要求的字符串保存在tstringlist当中.
每行为单独的字符串,这样可以方便后续对解析出的字符串扩展应用.
比数组直观一点.实在要用数组就自己变通一下.
如果要按照你要求的那样排列字符串的话可以用以下函数:
function ShowStr(stringlist:TStringList):Tstringlist;
var
i,k:integer;
begin
result:=tstringlist.Create;
if not Assigned(stringlist) then
begin
result.text:=':(';
Exit;
end;
for i:=0 to stringlist.Count-1 do
begin
result.Add(stringlist[0]);
for k:=1 to i do
begin
Result[i]:=Result[i]+' '+stringlist[k];
end;
end;
end;
到此为止,这两个函数搭配使用已经完全可以满足你的要求了,看,有分的服务就不同的拉.
效果可参见附件图片