避免使用C++ getline() 的评论
Avoiding Comments w/ C++ getline()
我正在使用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。
如果标记机器进入和退出注释状态的字符的位置,则可以从字符串中删除这些字符。
或者,您可以探索正则表达式,这些正则表达式提供了非常简洁地描述这种状态机的方法。
所以,一个问题是if(fileData[i] == '/*')
正在测试char
fileData[i]
是否等于'/*'
这是......不是char
.
要查找行是否包含注释,您可能需要查看以下内容之一:
-
<regex>
在 C++11 中(Boost 也有一个正则表达式库,如果这更符合您的要求。 -
strstr
香草 C/C++。
您可能希望存储类似存储一个标志的东西,指示前一行的状态是否为"在注释中",然后根据该标志搜索/*
或*/
,并随时更新它。
引号表示char
,char
数据类型表示单char.
"/*"没有意义,因为它是两个char
而fileData[i]
指的是单个char
。
您的if
声明需要更加强大。
- Seg Fault Issue C++ (file IO / getline)
- 当用户键入分隔符时,停止getline()输入
- getline() 的原型/库是什么;
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 如何以叮当格式设置评论的行长?
- 如何在 c++ 中使用 ',' 作为 getline 分隔符
- 错误:调用'getline'没有匹配函数
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将 getline() 与文件一起使用
- 我有三个 getline,但是一旦编译,输入就太多了
- 在 std::getline 和 std::cin 期间卡在循环中
- 为什么 getline() 不读取文本文件中的所有内容?
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 叮叮当当:什么可能导致NOLINT评论不被尊重?
- std::getline没有在while循环中重新请求用户输入
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- Getline(cin,str)的奇怪输出
- 我在C++中使用 getline() 函数时遇到问题
- 避免使用C++ getline() 的评论