请教一个算法的问题 ( 积分: 25 )

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

bryantd

Unregistered / Unconfirmed
GUEST, unregistred user!
有一些字符串,它们中间有一些注释,比如:It's <Delphibbs<Yeah>>
Windows<Thanks>
XP,其中的<Delphibbs<Yeah>>、<Thanks>就是注释,可以看出,注释可以是嵌套的。我想删除这些注释,用的办法是:扫描这句话,发现了“<”就它的位置进栈,遇到“>”就将它的位置出栈,然后删除中间的字符。
但是遇到了字符串本身就有“<”或“>”,而它们又不是注释的时候,比如:It's a special<Thank you>
character '>'这样做就明显会造成UnderFlow(下溢)了,那位能帮我写个好一点的算法??谢谢了!!
 
有一些字符串,它们中间有一些注释,比如:It's <Delphibbs<Yeah>>
Windows<Thanks>
XP,其中的<Delphibbs<Yeah>>、<Thanks>就是注释,可以看出,注释可以是嵌套的。我想删除这些注释,用的办法是:扫描这句话,发现了“<”就它的位置进栈,遇到“>”就将它的位置出栈,然后删除中间的字符。
但是遇到了字符串本身就有“<”或“>”,而它们又不是注释的时候,比如:It's a special<Thank you>
character '>'这样做就明显会造成UnderFlow(下溢)了,那位能帮我写个好一点的算法??谢谢了!!
 
是否可借鉴C语言中转义字符的概念?比如 "为字符串括号, 则"xxx"
表示字符串 xxx , 而 用/"
表示 真正的", 则"/"xxx"
表示字符串 "xxx ,否则可能的确不好区分.
 
<Delphibbs<Yeah>>和你说的<<Delphibbs<Yeah>>不一样呀,少了半个前括号况且<Thanks>和<Thank you>看起来都被扩着呀,你的注释有规律么,比如具有相同的字符串或者位置相同,要么长的都比较像刘德华?如果你的注释是用<<,>>区分的就好办多了,要不是像楼上一样,先手动修改不是注释的<>为其他字符,修改完后替换,最后再替换回<>.
 
见意你看一下有关编译原理中的自动机
 
我写错了,现在修改了。你再看看。注释的标志就是<注释内容>,我的意思就是如果字符串中本身也有<或>,而它们还不是注释的情况下。应该怎么写算法??比如就像:
It's a special<Thank you>
character '>'
这句话中<Thank you>
是注释,而最后那个'>'就不是注释了。
 
这简单,苯办法先寻找字符串中的所有<>的位置设定2个boolean表示左右,注释肯定用<>圈起来,不是注释的只有半边呗,你就寻找'<'当找到后记录位置左半边设真进入循环然后再寻找'>'找到的化右半边设真记录位置,两个都为真清除两个位置之间的字符,如果只有一半是真而又找到同样的一半没关系做递归不就行了.
 
抱歉,不是先寻找全部的<>而是作递归寻找<>
 
照楼上说的,如果有这样一句话怎么办:
It's a special<Thank you>
character '<',and another is '>'.
 
'>
不是就成了啊
 
先设一个boolean值
TRUE 允许栈操作 FALSE 不允许
遇到‘ false 压入‘ 遇到 ’ 弹出‘ ’ true (再开一个栈)
 
哪还用什么栈啊
开始读置I=0为'('个数如果
1,读入的是'('或则I加1,省略它后面的字符
2,直到读到'('转1.
3,读到')'则将I减1 如果I<>0则转2
否则转1.
4.结束.
 
后退
顶部