2014-01-27 59 views
-1

我有这段代码读取另一个文件并计算行数;该部分工作正常。忽略评论C++

我想要做的是省略注释行,所以程序只读取实际的代码而不是注释。

希望有人能帮助我:/

#include <iostream> 
#include <fstream> 
#include <istream> 
using namespace std; 
int main() { 

    int numlines = 0; 
    string line; 

    ifstream myfile("wr.cpp"); 
    while (myfile.good()) 
    { 
    getline(myfile, line); 
    ++numlines; 
    } 
    cout << "Number of lines: "<<numlines<< endl; 
    return 0; 
} 
+0

你会计算一行太多,因为你不测试'getline()'工作。你还没有尝试数过评论 - 告诉我们你在尝试什么。上周至少有两个'检测评论'问题 - 请参阅您可以在SO上找到哪些已经回答您的问题。 –

回答

2

首先,while (myfile.good())是错误的。它应该是while (std::getline(myfile, line))。测试good()将仅测试之后的流的状态,您尝试读取(并已增加计数)。测试getline调用将立即进行测试。

在此之后,你只需要检查的第2个字符,看它是否是一个注释行(假设///*是你的注释块和所有的意见都只有一行):

while (std::getline(myfile, line)) 
{ 
    std::string test = line.substr(0, 2); 
    if (!(test == "//" || test == "/*")) 
    { 
     ++numlines; 
    } 
} 
+0

非常感谢你,我尝试了这个,并且工作正常。 谢谢Zac – user3214262

+0

根据应用程序,这可能会失败。如果这段代码将被重用,请确保您解决了“/ *”跨越多行注释的情况。正如Zac所说:“假设//和/ *是你的评论块,所有评论都只是一条线”。 – Wilsonator

+0

谢谢威尔逊,我会照顾双线评论。这段代码帮助我很多。感谢您的评论 – user3214262