delphi关于字符串的截取问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi关于字符串的截取问题相关的知识,希望对你有一定的参考价值。

现在有字符串
"AAA BB CCC DD "
AAA BB这些字符串的长度和空格的长度是随机的

现在想要从AAA开始截取,分别截取为
AAA
AAA BB
AAA BB CCC
AAA BB CCC DD
中间的空格都要保留,末尾的不用

不知道各位有办法吗?
AAA BB这些字符串的个数也是随机的哦,就是说可能还有EEE FF之类的
我想用数组来写,可以不?

如果有好的代码,我会追加分的

解决了没有啊? 

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; 

procedure 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; 

procedure 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;

参考技术A

procedure 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;

参考技术B

好吧,重新改了一下,试试下面这段,应该完全可以满足你的要求.

结合了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;

到此为止,这两个函数搭配使用已经完全可以满足你的要求了,看,有分的服务就不同的拉.

效果可参见附件图片

VC++ 关于截取图象并保存进数据库的问题

请教大家...我在一个对话框上绘制了一些图形,然后想把对话框截取下来

并且存入数据库..这个怎么实现呢??大家给点思路,或者代码..在下感激不

尽.分数一定给.

一、截取对话框,也就是保存图形

二、存入数据库.用ODBC

大家随便在这两点上给点意见都行..先谢过...

希望大家多多帮忙啊...
qinhongcom :你给的网站确实满不错的,在规定时间内要是没有人给答案,我准备把这个分数给你吧.先谢过了
梦回星梦:我说的是用编程啊..不是快捷键
woshidie0310:你的东西乱七八糟..推广网站也不用这样吧

给你个截屏函数:

BOOL GetMyScreen(CDC *pdc // 目标DC)


CDC dc;
dc.CreateDC("DISPLAY", NULL, NULL, NULL); // 屏幕DC

CRect clientRect;

GetClientRect(clientRect); // 对话框矩形区域

pdc->BitBlt(0,0,clientRect.Width(),clientRect.Height(), &dc, 0,0,SRCCOPY );

dc.DeleteDC();



看得明白吧,很简单的,往数据库里写,我就不用多说了,呵,有什么不明白的给我发站内。
参考技术A http://www.vckbase.com/code/ 参考技术B 截取对话框你可以试试ALT+PrtScSYsRq 后面的我就不知道拉 我还没学到 参考技术C 在运行对话框里面可以找到的,

以上是关于delphi关于字符串的截取问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi关于字符串的循环重复提取

delphi关于stringgrid字符串转换的问题

delphi 如何不出乱码的截取字符串?

delphi中 怎样截取字符串

delphi 循环提取字符串问题!~

在delphi中如何获取字符串的内存地址