我正在使用 getline() 打开一个 .cpp 文件。
getline(theFile, fileData);
我想知道是否有任何方法可以让 getline() 避免获取 C++ 注释(/*、*/
和 //
)?
到目前为止,尝试这样的事情不太奏效。
if (fileData[i] == '/*')
最佳答案
我认为您不可避免地要阅读评论,但是您可以通过一次一个字符地阅读文件来处理它们。
为此,您可以将文件加载到字符串中并构建具有以下状态的状态机:
- 这是实际的代码
- 前一个字符是
/
- 前一个字符是
*
- 我是单行评论
- 我是多行评论
状态机开始于状态 1
如果机器处于状态 1 并命中一个 /
字符,则转换到状态 2。
如果机器处于状态 2 并命中一个 /
字符,则转换到状态 4。否则,转换到状态 1。
如果机器处于状态 2 并命中一个 *
字符,则转换到状态 5。否则,转换到状态 1。
如果机器处于状态 4 并命中一个换行符,则转换到状态 1。
如果机器处于状态 5 并命中一个 *
字符,则转换到状态 3。
如果机器处于状态3并命中了一个/
字符,则转换到状态1(多行注释结束)。否则,过渡到状态 5。
如果标记机器进入和退出注释状态的字符位置,则可以从字符串中剥离这些字符。
或者,您可以探索正则表达式,它提供了非常简洁地描述这种状态机的方法。
关于c++ - 使用 C++ getline() 避免注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19235644/