c++ - 使用 C++ getline() 避免注释

标签 c++

我正在使用 getline() 打开一个 .cpp 文件。

getline(theFile, fileData);

我想知道是否有任何方法可以让 getline() 避免获取 C++ 注释(/*、*///)?

到目前为止,尝试这样的事情不太奏效。

if (fileData[i] == '/*')

最佳答案

我认为您不可避免地要阅读评论,但是您可以通过一次一个字符地阅读文件来处理它们。

为此,您可以将文件加载到字符串中并构建具有以下状态的状态机:

  1. 这是实际的代码
  2. 前一个字符是/
  3. 前一个字符是*
  4. 我是单行评论
  5. 我是多行评论

状态机开始于状态 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/

相关文章:

c++ - 查找与存储在 vector 中的对象对应的迭代器

c++ - 如何将像素数组转换为 HBITMAP

c++ - 这是 std::vector 的正常行为吗?

c++ - 在 C++ 中包含 .txt 文件中的文本以获得学分的问题

c++ - 我如何使用互斥锁锁定对 bool 的访问?

c++ - 不能包含 "vcruntime_new_debug.h"

c++ - 如何在 Linux 中运行 OCI

c++ - 当数据不是 key 大小的倍数时加解密

c++ - 什么样的面试题适合c++手机屏幕?

c++ - 如何使用glm::isnan()