【发布时间】:2017-01-19 08:03:54
【问题描述】:
我目前正在开发一个加载文件然后将行数读回给用户的程序。我只需要一些关于何时让程序计算一行的帮助。目前我有:
getline(file, line);
if(line.empty() || line.find("//") || line.find("**") || line.find("/*") || line.find("*/"))
{ skip line }
唯一的问题是如果程序仍有代码但有注释(以下任何示例),则程序不会计算行数:
code... //comment
code... /* comment
/* comment */ code...
任何提示或帮助?
【问题讨论】:
-
std::cout << "//" << std::endl;和int** ptr怎么样 -
你不能像那样计算行数(你可以,但它会是错误的)。多线
/* */cmets呢?您需要一个词法分析器/标记器并记住您所处的状态(评论与否)。 -
这是一个很好的初学者编程练习。构建一个简单的状态机来跟踪您浏览文本的状态。
-
如果您不是为 lulz 执行此操作,gcc 可以使用
-fpreprocessed为您删除 cmets,剩下的就是小菜一碟。 -
使用已经为此实现解析器的工具(如CLOC)。解析 cmets 看起来可能不是一项非常具有挑战性的任务。然而,确实如此。考虑像@987654328@ 这样的代码,它(取决于评估的顺序)可能会被错误地解释为块注释的开始。您还需要排除字符串文字的解析,以及可能的
#include指令。这确实比看起来更难。
标签: c++ count comments line skip