2014-01-27 90 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