2012-11-13 75 views
0

C++ ifstream的獲得線變函數getline輸出字符字符串ifstream的獲得線改變輸出字符字符串

我有一個文本文件..所以我讀了它,我這樣做

char data[50]; 
readFile.open(filename.c_str()); 

while(readFile.good()) 
{ 
readFile.getline(data,50,','); 

cout << data << endl; 

} 

我的問題是不是由變量名的數據創建大小爲50一個char,我可以得到函數getline的字符串,而不是像

string myData; 
readFile.getline(myData,','); 

我的文本文件是這樣

Line2D中,[3,2] Line3D,[7,2,3]

我試圖和編譯器說..

沒有匹配函數函數getline(的std :: string &,炭)

所以有可能仍然按分隔符分隔,將值賦給字符串而不是char。

更新:

使用

while (std::getline(readFile, line)) 
{ 
    std::cout << line << std::endl; 
} 

IT逐行讀取,但我想打破字符串分成幾個分隔符,本來如果使用字符我將指定分隔符爲這是

第三元素

readFile.getline(data,50,'');

如果我用分隔符逗號打破/爆炸,上面的那個,我該如何處理字符串。在由線

+1

請參閱http://en.cppreference.com/w/cpp/string/basic_string/getline –

+1

你試過了嗎? – billz

+0

@billz是它說沒有提及getline函數(std :: string&,char) – user1777711

回答

6

使用std::getline()行:

std::string line; 
while (std::getline(readFile, line, ',')) 
{ 
    std::cout << line << std::endl; 
} 

一定要檢查的讀取操作的結果立即否則代碼會嘗試處理失敗的讀取的結果,是與發佈代碼的情況。

儘管可以在getline()中指定不同的分隔符,但它可能會錯誤地將兩條無效行作爲單個有效行處理。建議檢索每一行完整,然後拆分行。分割線的有用工具是boost::split()

+0

@mhjd,很好的答案,但也許你可以說一些關於爲什麼OP代碼while(readFile.good())'是錯誤的 – john

+0

@hmjd,現在我逐行讀取它,但是如果我想通過分隔符將其分開,值將存儲在字符串中,那麼我如何繼續 – user1777711

+0

@ user1777711,您可以使用如圖所示的分隔符。 – hmjd