C ++ 11 sscanf替代方案

时间:2013-08-19 11:48:08

标签: c++11 delimiter scanf

我需要支持空格,制表符和换行符分隔符。我可以用sscanf做到这一点,但我更喜欢坚持使用字符串而不是char * s。

有没有办法在C ++ 11中实现这个?

1 个答案:

答案 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将产生相同的结果。