2010-02-24 64 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 
    } 
}