C ++:将字符串和内容分割成std :: vector的优雅方式

时间:2010-10-29 21:05:03

标签: c++ string split

我想沿着空格分割一个字符串,我知道这些标记 表示有效整数。我想将标记转换为整数 并用它们填充矢量。

我可以使用boost :: split,制作一个令牌字符串的向量,然后使用std :: transform。

你的解决方案是什么?使用提升是可以接受的。

4 个答案:

答案 0 :(得分:8)

这样的事情:

std::istringstream iss("42 4711 ");
std::vector<int> results( std::istream_iterator<int>(iss)
                        , std::istream_iterator<int>() );

答案 1 :(得分:4)

您可以使用Boost.Tokenizer。它可以很容易地包含在explode_string函数中,该函数接受一个字符串和分隔符并返回一个标记向量。

在返回的向量上使用transform对于从字符串到int的转换是个好主意;您也可以将Boost.Tokenizer迭代器传递给transform算法。

答案 2 :(得分:1)

使用Boost的字符串算法库将split字符串转换为字符串向量,然后std::for_each以及atoiboost::lexical_cast将其转换为int秒。它可能比其他方法简单得多,但由于副本可能没有最好的性能(如果有人有办法改进它并删除它,请注释)。

std::vector<int> numbers;

void append(std::string part)
{
    numbers.push_back(boost::lexical_cast<int>(part));
}

std::string line = "42 4711"; // borrowed from sbi's answer
std::vector<std::string> parts;
split(parts, line, is_any_of(" ,;"));
std::for_each(parts.being(), parts.end(), append);

大致。

http://www.boost.org/doc/libs/1_44_0/doc/html/string_algo.html http://www.boost.org/doc/libs/1_44_0/libs/conversion/lexical_cast.htm

答案 3 :(得分:0)

你总是可以使用strtok或string.find()。