使用boost生成适当数量的令牌

时间:2015-04-01 10:34:20

标签: c++ boost

我的代码如下

 std::string some_string = "-0.003  79350   -0.267  147";
 boost::algorithm::trim (some_string);
 //std::cout << some_string << std::endl;
 boost::tokenizer<> tok( some_string );
 const auto n = std::distance( tok.begin(), tok.end() );
 std::cout << n << std::endl;

我希望令牌的数量为4,但它给出了6。任何建议,将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

无需提升也更正确。

假设您实际上希望解析数字

,这更为正确

<强> Live On Coliru

#include <iostream>
#include <sstream>
#include <iterator>

int main() {
    std::istringstream some_string ( "-0.003  79350   -0.267  147");
    std::cout << std::distance(std::istream_iterator<double>(some_string), {});
}

更新

如果您想保留令牌,而不仅仅是解析数字:

<强> Live On Coliru

istringstream s("-0.003  79350   -0.267  147");

vector<string> vec(istream_iterator<string>(s), {});

cout << vec.size();

答案 1 :(得分:-2)

以下代码根据需要输出4.

#include<iostream>
#include<string>
#include<boost/tokenizer.hpp>

int main() {
   std::string s = "-0.003  79350   -0.267  147";
   boost::tokenizer<boost::char_separator<char> > tok(s, boost::char_separator<char>(" "));
   const auto n = std::distance( tok.begin(), tok.end() );
   std::cout << n << std::endl;
}

Coliru上的相同代码是here