分隔字符串问题?(50分)

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

zqssoft

Unregistered / Unconfirmed
GUEST, unregistred user!
请问:如何将一段英文文本字符串按如下的形式分出来。请高手给出具体实现代码,谢谢。

原文(如下):
The Mozilla project is made possible thanks to contributions from users like you. Please consider supporting our ongoing efforts to provide the world with a free, faster,

分隔处理后的文本格式(如下):
The Mozilla.
Mozilla project.
project is.
is made.
made possible.
possible thanks .
thanks to .
to contributions.
contributions from.
from users.
users like .
like you.
Please consider.
.......

谢谢解答者。给50分。
 
把两个空格之间的每个单词放在一字符串数组内
然后按
a[1]+a[2]
a[2]+a[3]
a[3]+a[4]
这样的方式排列就OK了,
当然,实际运用不需要用到数组
思路就这样
 
同意楼上的,
不过之前先将其中的标点符号替换,用函数stringreplace,如将string1中的逗号变为空格用string1:=stringreplace(sring1,',',' ',[rfReplaceAll]);

再用空格为标识,进行分段取单词放入数组,如:
var
tempint,i,j,k,l:integer;
tempstr:string;
a:array of string ;
begin
j:=0;
k:=0;
tempstr:=trim({在这里输入要变的英文字符串})+' ';
tempint:=length(tempstr);
for i:=1 to tempint do
begin
if tempstr=' ' then
begin
for l :=j to i do
begin
a[k]:=a[k]+tempstr[l];
end;
j:=i;
k:=k+1;
end;
end;
最后就是输出啦,见楼上的
 
当然,如果是很长的文章的话,建议不用数组,用两个字符串来记录,也就是发现第二个空格就输出,并记数清零,这样不用占太多空间
 
S1=S1+S2+'.'+#13
每次用S2取第二个空格前的两个词,然后删除第一个空格前的内容。
一个循环就OK了
 
procedure TForm1.Button1Click(Sender: TObject);
var
strList:Tstringlist;
str:string;
i:integer;
begin
str:='The Mozilla project is made possible thanks to contributions from users like you. Please consider supporting our ongoing efforts to provide the world with a free, faster,';
try
strList:=TstringList.Create;
strList.Delimiter:=' ';
strList.DelimitedText:=str;
for i := 0 to strList.Count-1 do
begin
if i<strList.Count-1 then
memo1.Lines.Add(strlist+' '+strList[i+1])
else
memo1.Lines.Add(strList)
end;

finally
strList.Destroy;
end;

end;
 
否则您要定义字典
 
谢谢各位,经测试,hityou的方法代码可行。谢谢。

还有两个问题要请教各位,请不吝指教:
1.如何将一段中文文本按下如形式分隔出来?

原文本:我是一个中国人,我深深的爱着我的祖国和人民。...
分隔后文本:






















.
.
.


2.如何将一段英文文本按如下形式分隔出来?

原文本:hello,how are you?
分隔后文本:
hello
,
how
are
you
?

请高手给出具体实现代码,谢谢解答者。
 
正则表达式
 
还有谁,还有谁???
不用正则表达式能够解决,请指教。:)
 
都好处理,加#13#10而已

关键是分隔单位比如 空格 或者逗号一类的
 
第二个问题
procedure TForm1.Button1Click(Sender: TObject);
var
myint,i,j,k:integer;
mystr,outstr:string;
begin
mystr:=trim('hello,how are you?') ;
myint:=length(mystr+' ');
i:=1;
k:=1;
while i < myint do
begin
if not(mystr in ['A'..'Z','a'..'z'])then
begin
outstr:='';
for j := k to i-1 do
begin
outstr:=outstr+mystr[j];
end;
memo1.Lines.Add(trim(outstr));
k:=i;
if mystr<>' 'then
begin
memo1.Lines.Add(mystr);
k:=k+1;
i:=i+1;
end;
end;
i:=i+1;
end;
end;
 
给个思路吧
save,strmax,strmin:string
strmax:=字符串;
if pos( ' ',strmax )=0 then
begin
输出strmax;
exit
end;
while pos(' ',strmax)<>0 do
begin
save:=copy(strmax,0,pos(' ',strmax));
strmax:=copy(strmax,length(save),length(strmax));
if pos(' ',strmax)<>0 then
strmin:=pos(' ',strmax)
else
begin
输出save+strmin;
exit;
end;
输出save+strmin
end
 
可以对不同的字符串进行分割:函数如下:
procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);
{ This browses a string and divide it into terms whenever the given
separator is found. The separators will be removed }
var
hs : string;
p : integer;

begin
Terms.Clear; // First remove all remaining terms
if Length(s)=0 then // Nothin' to separate
Exit;
p:=Pos(Separator,s);
while P<>0 do
begin
hs:=Copy(s,1,p-1); // Copy term
Terms.Add(hs); // Add to list
Delete(s,1,p); // Remove term and separator
p:=Pos(Separator,s); // Search next separator
end;
if Length(s)>0 then
Terms.Add(s); // Add remaining term
end;
如字符串特别长的话,修改s : string 为 s:widestring ,
可以用这个函数嵌套使用分割到stringlist中,然后在把stringlist.strings的字符串分割到另一个stringlist中,循环读取最后的stringlist就可以了。
 
不知道是否明白用意?用代码实践一下就明白了
 
先通过空格把所有单词整理到一个TStrings中
然后for i:=0 to strs.Count-2 do
line:=strs+' '+strs[i+1];
就搞定了
 
分不够了,3Q大家,小弟不胜感激。
感激之情。。。。
如涛涛江水,一片汪洋。
不说了。。。。说不下去了。
555。。。
 

Similar threads

后退
顶部