2015-11-19 74 views
0

我想從.ppm文件中使用「ifstream」解析C++中的文本,但是我想避免以字符「#」開頭的文件中的註釋並在最後完成我可以使用下面的代碼跟蹤評論字符...任何人都可以幫助如何解除其餘的單詞,直到字符'\ n'?如何在解析文本時刪除註釋C++

string word;    
file>>word; 
if(strcmp(word, "#")){ 
    //TO DO...Dismiss all characters till the end of the line 
} 
+3

可能最好使用'std :: getline()'作爲您的案例的主要輸入源。非註釋行可以用'std :: istringstream'進一步檢查。 –

回答

2

使用std::getline() & continuewhile循環,如果line[0] == '#'

std::ifstream file("foo.txt"); 
std::string line; 
while(std::getline(file, line)) 
{ 
    if(line.empty()) 
     continue; 

    if('#' == line[0]) 
     continue; 

    std::istringstream liness(line); 
    // pull words out of liness... 
} 

或者如果#可出現中線你可以不顧一切之後:

std::ifstream file("foo.txt"); 
std::string line; 
while(std::getline(file, line)) 
{ 
    std::istringstream liness(line.substr(0, line.find_first_of('#'))); 
    // pull words out of liness... 
} 
+0

非常感謝..! –

+1

是否保證'#'將始終位於第0個位置? –

+0

不,這不是...... –

0

根據你想剝離的評論的複雜性,你可以考慮使用regul AR表達式:

Removing hash comments that are not inside quotes

例如,其中這些將被視爲註釋:

# Start of line comment 
Stuff here # mid-line comment 
Contact "Tel# 911" 

你想要去除所有三個#後,上面的例子嗎?

或者如果該行的第一個字符是#,那麼您是否只考慮該註釋?

+0

我正在考慮這兩種情況 –

+0

您可以使用正則表達式,例如'(?:「(?:[^」\\] | \\。)*「| [^」# ])*(#| $)'來捕獲評論 – RPGillespie