2010-02-24 69 views
3

我有一個文件:istringstream - 如何做到這一點?

a 0 0 
b 1 1 
c 3 4 
d 5 6 

使用istringstream,我需要一個,然後是B,然後是C等,但我不知道該怎麼辦,因爲沒有很好的例子在網上或我的書。

到目前爲止的代碼:

ifstream file; 
file.open("file.txt"); 
string line; 

getline(file,line); 
istringstream iss(line); 
iss >> id; 

getline(file,line); 
iss >> id; 

這版畫 「A」 爲ID兩次。我不知道如何使用istringstream,我必須使用istringstream。請幫忙!

回答

5
ifstream file; 
file.open("file.txt"); 
string line; 

getline(file,line); 
istringstream iss(line); 
iss >> id; 

getline(file,line); 
istringstream iss2(line); 
iss2 >> id; 

getline(file,line); 
iss.str(line); 
iss >> id; 

istringstream複製您給它的字符串。它無法看到line的更改。要麼構造一個新的字符串流,要麼強制它獲取字符串的新副本。

+0

我當時希望情況並非如此,但我在循環中添加了iss2,因此每次都會重新初始化,並且工作正常。謝謝 – 2010-02-24 06:14:39

+4

在用iss.str(line)設置一個新字符串後總是調用'iss.clear()'很重要' – phunehehe 2010-08-28 16:44:15

2

你也可以通過兩個while循環來做到這一點: - /。

while (getline(file, line)) 
{ 
    istringstream iss(line); 

    while(iss >> term) 
    { 
     cout << term<< endl; // typing all the terms 
    } 
}