2013-08-19 101 views
0

我需要空间,制表符和换行符分隔符的支持。我可以用sscanf来做到这一点,但我更愿意坚持使用字符串而不是char * s。C++ 11 sscanf替代方案

有没有一种方法可以在C++ 11中实现这一点?

+1

什么abous'streams'?他们真的很糟糕吗? –

+3

['std :: istringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream)? –

+0

流只允许单个分隔符,除非你们知道我不知道的一个技巧。 –

回答

1

这个怎么样简单的程序:

#include <iostream> 
#include <string> 
#include <vector> 
#include <algorithm> 
#include <sstream> 

int main() 
{ 
    std::vector<std::string> v; 
    std::istringstream is{"example input\ttext\nhere"}; 

    std::copy(std::istream_iterator<std::string>(is), 
       std::istream_iterator<std::string>(), 
       std::back_inserter(v)); 

    for (const auto& s : v) 
     std::cout << s << '\n'; 
} 

从这个程序的输出是

 
example 
input 
text 
here 

正如你可以看到它使用任何空格作为分隔符。你当然也可以使用输入操作,以及像在

std::string s; 
while (is >> s) 
    v.push_back(s); 

以上,而不是std::copy会产生相同的结果。