我正在处理程序中的逻辑行数,省略注释和黑线。计数线正在工作,但我不知道如何省略注释行,我尝试
if (line == "//")
{
comment++;
}
但它只检查以以下开头的行"//"
如果旁边有文本,则不会将其视为注释行:/
最后当我知道总行数和总注释行数时,我会减去totalLines-commentLines
了解真正的程序行数。
有人可以帮我弄这个吗?
谢谢
#include <iostream>
#include <fstream>
#include <istream>
using namespace std;
int main()
{
int numlines = 0;
int comment = 0;
string line;
ifstream myfile("wr.cpp");
while (myfile.good())
{
getline(myfile, line);
if (line == "//")
{
comment++;
}
if (line == "/**/")
{
comment++;
}
++numlines;
}
cout << "Number of lines: " << numlines << endl;
cout << "Number of comment lines: " << comment << endl;
return 0;
}
我认为你的方法是......有缺陷的。
考虑这样的一行:
int x = 1; // starting from 1 because [some reason]
正如您的代码现在所显示的那样,它仅算作非注释行。正如您所描述的那样,它仅算作注释行。
实际上, tThis 包含代码和注释,因此您通常希望将其计为代码and评论,而不仅仅是其中之一。
做好这项工作绝对不是一件小事。您遇到的明显问题是:
- 包含看起来像注释的内容的字符串
- 行延续
- trigraphs
- 多行C风格注释
-
#if
s, #ifdef
s, etc.
可能还有更多的问题(尽管这正是我立即想到的),但这些应该足以至少给出一个总体的感觉。
底线:我认为要在这方面(完全)走得更远,你至少需要一个相当完整/准确的C++ 词法分析器 https://stackoverflow.com/a/7051822/179910。您可能不需要完整的解析器,但我认为任何不使用完整的 C++ 词法分析器的尝试几乎肯定会失败,而且可能会非常严重且非常频繁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)