我的代码如下
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。任何建议,将不胜感激。感谢。
答案 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。