2014-09-12 35 views
3

我需要根据自定义分隔符剪切字符串流。目前的代码只是根据几个标准分隔符来裁减。如何定义和剪切stringstream根据自定义分隔符字符串行?Tokenize stringstream

std::istringstream input; 
input.str("1\n2\n3\n4\n5\n6\n7\n"); 
int sum = 0; 
for (std::string line; std::getline(input, line);) 
    { 
    cout<<line; 
    } 

回答

3

如果你有一个分隔符,你想使用它的单个字符,你可以把它传递给std::getline() 3参数过载:

std::istringstream input; 
input.str("1;2;3;4;5;6;7;"); 
int sum = 0; 
for (std::string field; std::getline(input, field, ';');) 
    { 
    std::cout<<field; 
    } 

Live example

对于其他情况(多字符分隔符,多个分隔符),您可能需要考虑使用Boost.Tokenizer

2

使用重载std::getline

for (std::string line; std::getline(input, line, delimiter);) 
{ 
    std::cout<< line <<'\n'; 
} 
的第三个参数