如何这样分离字符串???(50分)

  • 主题发起人 主题发起人 zqssoft
  • 开始时间 开始时间
Z

zqssoft

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个Memo1控件中,有如下的文本,为中英文混合格式的:

"我是一个中国人,My name is lilei.我爱我的祖国,big big ABC...."

请问:如何书写代码才能将上述文本中的英文单词提取出来,并分行成如下的格式,显示
在另一个Memo2控件中?

My
name
is
lilei
big
big
ABC
请各位大哥给出实现代码,谢谢。
 
做判断, 字母 空格

一个个读总能读出来,
先判断是否是字母, 是字母就读, 然后判断后面那个字符是否是空格或者.或者, 之类的.
不是就直接在读进来,是 就回车 下一行
 
正贼表达试
 
ok,这样写:


var
s: pchar;
sl: tstrings;
begin
s := 'my name is lilei Big Big ABC';
sl := tstringlist.create;
extractstrings([' '], [], s, sl);//分解单词
showmessage(sl.text);
memo1.text := sl.text;//将分解结果填入memo
sl.free;
end;
 
哦,学习到了extractstrings 原来有这个函数的. 以前都是自己写的,太亏了
 
for I := 1 to Length(Memo1.Text) do
begin
if Str in ['a'..'z','A'..'Z'] then
Memo2.Text := Memo2.Text + Str
else if Str[I+1] in [',', '.', ';', #10] then
Memo2.Text := Memo2.Text + #13;
end;
 
又学了一招,呵呵
 
1、将所有空格替换成换行符
2、将替换后的字符串赋值给TStringList类型
3、过滤所有的中文字符
4、分别读取TStringList的Strings属性
OK
 
procedure TForm1.Button1Click(Sender: TObject);
const
CharSetOfWord:set of char=['a'..'z','A'..'Z'];
var
s,word:string;
ps,pd:PChar;
si,di,i:integer;
begin
ps:=Pointer(Memo1.Text);
si:=1;
SetLength(s,Length(Memo1.Text));
pd:=Pointer(s);
di:=0;
word:='';
While ps[si-1]<>#0 do
begin
case ByteType(ps,si) of
mbSingleByte:
begin
if ps[si-1] in CharSetOfWord then
word:=word+ps[si-1]
else
if word<>'' then
begin
for i:=1 to Length(word) do
begin
pd[di]:=word;
inc(di)
end;
pd[di]:=#13;
pd[di+1]:=#10;
di:=di+2;
word:=''
end;
inc(si)
end;
mbLeadByte:
begin
if word<>'' then
begin
for i:=1 to Length(word) do
begin
pd[di]:=word;
inc(di)
end;
pd[di]:=#13;
pd[di+1]:=#10;
di:=di+2;
word:=''
end;
si:=si+2
end
else
inc(si)
end
end;
if word<>'' then
for i:=1 to Length(word) do
begin
pd[di]:=word;
inc(di)
end
else
if di>0 then
SetLength(s,di-2)
else
s:='';
Memo2.Text:=s
end;
 
一个问题,提两次啊http://www.delphibbs.com/delphibbs/dispq.asp?lid=3608407
 
接受答案了.
 
后退
顶部