字符串操作的问题

hbuzcy 2007-04-29 12:59:23
我有一个字符串,其中有很多在小括号里面的注释,而且注释的内容不同,请教如何删除括号和注释的内容。
例如:
asafsdf(asdfgg)trqwrw(asdfsdf)
只是保留asafsdftrqwrw而口号删除了。
...全文
281 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Harryfin 2007-04-29
  • 打赏
  • 举报
回复
我觉得用正则表达式也会是一种方法,不知道效率如何。
linzhengqun 2007-04-29
  • 打赏
  • 举报
回复
To BlueTrees(蜗牛) ,你的实现版本:
1、语法错误太多
2、没有考虑括内嵌括号的情况
3、效率太慢:知道为什么吗?

我的实现
function RemoveComment(Str: string): string;
var
i, Len, Parentheses, Count: Integer;
begin
Result := '';
if Str = '' then Exit;
Count := 0;
Parentheses := 0;
Len := Length(Str);
SetLength(Result, Len);
for i := 1 to Len do
begin
if Str[i] = '(' then
Inc(Parentheses)
else if Str[i] = ')' then
Dec(Parentheses)
else if Parentheses = 0 then
begin
Inc(Count);
Result[Count] := Str[i];
end;
end;
SetLength(Result, Count);
end;

鼓励楼主研究如何把上面的函数效率提高,这是一个很好的学习机会。
Transitional 2007-04-29
  • 打赏
  • 举报
回复
:)
chenzhuo 2007-04-29
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
StartIndex, EndIndex: Integer;
begin
s := 'asafsdf(asdfgg)trqwrw(asdfsdf)';
repeat
StartIndex := Pos('(',s);
if StartIndex > 0 then
begin
EndIndex := Pos(')',Copy(s,StartIndex,Length(s)-StartIndex+1));
if EndIndex >0 then delete(s,StartIndex,EndIndex);
end;
until (StartIndex <= 0);
ShowMessage(s);
end;

不能删除 (fafwfewf(fwfwefwe)fwefwef)fwefew
括号里有括号的情况...

还有,下次不要把这种问题发在非技术区里面,一般人家不会答你的!
wintergoes 2007-04-29
  • 打赏
  • 举报
回复

function TForm1.Delbracket(str: String): String;
var
A:TStringList;
i:integer;
begin
Result :='';
A:=TStringList.Create;
Str:=StringReplace(str,'(',#13#10+'(',[rfReplaceAll]);
Str:=StringReplace(str,')',')'+#13#10,[rfReplaceAll]);
a.Text := str ;
for i:=0 to a.Count -1 do
if (Copy(A[i],0,1)<>'(')and(Pos(')',A[i])<=0) then
Result := Result + a[i];
a.Free;
end;
BlueTrees 2007-04-29
  • 打赏
  • 举报
回复
现在的娃啊,写这么个程序都觉得难,不知道当初编译原理是不是都还给老师了。

这个多简单啊!!!!

只有2种状态,没有回溯,还要问人。
BlueTrees 2007-04-29
  • 打赏
  • 举报
回复
function tranc(value:string):string
var
state:integer;
idx:integer;
begin
state=0;
Result:='';
for idx:=0 to legnth(value)-1 do
begin
if(state=0)then
begin
if(value[idx]<>'(') then
Result:=Result+value[idx]
else
state=1;
end else if(state=1)then
begin
if(value[idx]=')')then
state=0;
end;
end;
end;

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧