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;
参考技术Aprocedure 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关于字符串的截取问题的主要内容,如果未能解决你的问题,请参考以下文章