我正在努力实现计划中的逻辑线,省略注释和黑线。计数行正在运行,但我不知道如何省略注释行,我试试
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;
}
答案 0 :(得分:1)
我认为你的方法是......有缺陷的。
考虑如下一行:
int x = 1; // starting from 1 because [some reason]
由于您的代码现在正确,它只计为非注释行。正如您所描述的那样,它只会被视为注释行。
实际上,tThis包含代码和注释,因此您通常希望将其计为代码和注释,而不仅仅是其中一个。
做好这项工作绝对不是一件轻而易举的事。您遇到的明显问题是:
#if
s,#ifdef
s等可能存在的问题多于那些问题(虽然这只是我立即想到的问题),但这些问题应该足以给出至少一般的风格。
结论:我认为你要做到这一点(根本没有)至少需要一个相当完整/准确的C++ lexer。你可能不需要一个完整的解析器,但我认为任何不使用完整C ++词法分析器的尝试几乎肯定都会失败,可能非常糟糕而频繁。