我有一个字符串,可能包含也可能不包含C ++注释(多林和单行),我需要在能够使用该字符串之前删除这些注释。我目前的想法是使用NSScanner来做到这一点 - 找到打开和关闭多行注释的位置并删除字符串的那一部分并找到打开一行注释和EOL字符的位置,并删除该部分字符串
你会以不同的方式做吗?你的方法是什么?如果重要,字符串可以是几兆字节,因此性能是一个问题。
答案 0 :(得分:1)
从this thread开始,我认为最好的建议是通过C ++预处理器运行字符串。
答案 1 :(得分:0)
不要忘记跟踪引号。测试用例:
"/*Ceci n'est pas une commentaire*/"
'/**/'
(Mac OS / Mac OS X OSType
文字)'//!\n'
"This string does not contain a // comment"
在所有这些情况下,您都不应该发现评论。
反过来也是如此:
//Ceci n'est pas une "string"
/*This comment does not contain an OS'Type' literal*/
答案 2 :(得分:0)
我的解决方案:
使用NSScanner浏览字符串并标记每个多行和单个注释的位置以及所有字符串(单引号和双引号之间的任何内容)。将位置存储在NSValues数组中,表示每个项目的范围。
然后遍历注释数组,确保每条注释都不在字符串中。检查这一点的方法是确保每个注释的位置不大于每个字符串的位置,并且注释的位置不会落入每个字符串的位置+长度。
瞧。任何不属于的内容都可以安全删除,因为它是有效的评论。