生成使用升压
问题描述:
令牌的适当数量的我有一个代码如下生成使用升压
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。任何建议,将不胜感激。谢谢。
答
以下代码根据需要输出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。
答
无需提升,也更正确。
这是更正确的假设,你其实是想如果你想保留的令牌,而不是仅仅解析数字解析数
#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), {});
}
更新
:
istringstream s("-0.003 79350 -0.267 147");
vector<string> vec(istream_iterator<string>(s), {});
cout << vec.size();
我不得不downvote你'使用命名空间std;' – Puppy 2015-04-01 11:50:12
@Puppy其实我主要是关于它结合了'使用命名空间std'和事实感到惊讶'使用命名空间boost'这是一个非常糟糕的主意。这也可能是后续代码中名称空间仍然合格的原因... – sehe 2015-04-01 11:54:34
@Puppy,代码已修复。 – megabyte1024 2015-04-01 11:59:24