行计数C ++

时间:2014-01-25 22:21:58

标签: c++ lines counting

我正在努力实现计划中的逻辑线,省略注释和黑线。计数行正在运行,但我不知道如何省略注释行,我试试

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;
}

1 个答案:

答案 0 :(得分:1)

我认为你的方法是......有缺陷的。

考虑如下一行:

int x = 1;    // starting from 1 because [some reason]

由于您的代码现在正确,它只计为非注释行。正如您所描述的那样,它只会被视为注释行。

实际上,tThis包含代码和注释,因此您通常希望将其计为代码注释,而不仅仅是其中一个。

做好这项工作绝对不是一件轻而易举的事。您遇到的明显问题是:

  1. 包含看似评论内容的字符串
  2. 续行
  3. 三合字母
    • 可以隐藏续行
    • 可以创建错误的评论分隔符
  4. 多行C-ctyle评论
  5. #if s,#ifdef s等
  6. 可能存在的问题多于那些问题(虽然这只是我立即想到的问题),但这些问题应该足以给出至少一般的风格。

    结论:我认为你要做到这一点(根本没有)至少需要一个相当完整/准确的C++ lexer。你可能不需要一个完整的解析器,但我认为任何不使用完整C ++词法分析器的尝试几乎肯定都会失败,可能非常糟糕而频繁。