怎样将一个for循环顺序的循环下去呢?(20分)

  • 主题发起人 主题发起人 bingxueshanren
  • 开始时间 开始时间
B

bingxueshanren

Unregistered / Unconfirmed
GUEST, unregistred user!
我想找一篇文章里所有的句号、问号或叹号,并且在找到这些标点符号后,我要将其换行,直至将整篇文章都格式化成一句一行的形式,下面是我写的一个算法,已经能够找到第一个句号,并能够换行,但不知该如何往下继续循环查找后面的,也将其换行。
procedure TForm1.Button2Click(Sender: TObject);
var
I,Posi: Integer;
Left,Right: string;
sign: string;
MaxLen: integer;
begin
Maxlen := Length(RichEdit1.Text);
//ShowMessage(inttostr(Maxlen));
Sign := RichEdit1.Text;
for i:=1 to MaxLen do
if (sign='.') or (sign='?') or (sign='!') then
begin
Posi:=I;
break;
end;
for i:=1 to Posi do
begin
Left:=Left+sign;
//ShowMessage(LeftFile);
end;
for i:=Posi+1 to MaxLen do
begin
Right:=Right + sign;
//ShowMessage(Right);
end;

RichEdit1.Text :=Left+ #13#10 + Right;
end;
请各位看看,帮我该一下哦。谢谢了。
 
自己参照改一下吧.
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
str:string;
begin
str:= edit1.Text;
for i:= Length(str) downto 1 do
begin
if str='.' then
Insert(#13#10,str,i+1);
end;
Memo1.Lines.Add(str);
end;
ISeek的模式:
procedure TForm1.Button4Click(Sender: TObject);
var
str:string;
begin
str:= Edit1.Text;
str:= StringReplace(str,'.','.'#13#10,[rfReplaceAll]);
str:= StringReplace(str,'?','?'#13#10,[rfReplaceAll]);
str:= StringReplace(str,'!','!'#13#10,[rfReplaceAll]);
Memo1.Lines.Add(str);
end;
 
.....
Sign := RichEdit1.Text;
RichEdit1.clear;
tmp := '';
for i:=1 to MaxLen do
begin
if (sign='.') or (sign='?') or (sign='!') then
begin
tmp := tmp + sing;
RichEdit1.Lines.Add(tmp);
tmp := ''

end
else
begin
tmp := tmp + sing;
end;
end;
 
找一个全部替换函数,替换每一个句号问号或叹号为句号问号叹号加回车符即可。
 
设置一个循环起点
初始化为1
循环体中找到符合条件的东西后
将循环起点更改。
例如
while i <MaxLength do
begin
if ** then
begin
yourproc;
i:=current pos
end;
end;
 
var
xs: TStrings;
begin
xs:= TStringList.Create;
try
ExtractStrings(['.','?','!'],[],RichEdit1.Lines.GetText,xs);
RichEdit1.Lines.Assign(xs);
finally
xs.Free

end;
end;
 
接受答案。谢谢![:)]
 
chuwenyong 厉害啊 ISeek模式的相当简单啊
 
多人接受答案了。
 
后退
顶部