【问题标题】:String to int using boost spirit使用增强精神将字符串转换为 int
【发布时间】:2010-10-15 08:29:08
【问题描述】:

我听说 Spirit 将 string 转换为 int 的速度非常快。

但是,我无法创建一个可以做到这一点的简单函数。类似的东西

int string_to_int(string& s) { /*?????*/ }

任何人都可以使用boost精神来填补这个功能。

顺便说一下,我正在开发 boost 1.34,而不是最新版本。

【问题讨论】:

  • 它不是“真正”快,它只是以正常速度运行。听说过“盲人之地,独眼为王”的说法吗?

标签: c++ boost-spirit


【解决方案1】:

有几种方法可以实现这一点:

#include <boost/spirit/include/qi_parse.hpp>
#include <boost/spirit/include/qi_numeric.hpp>

namespace qi = boost::spirit::qi;

std::string s("123");
int result = 0;
qi::parse(s.begin(), s.end(), qi::int_, result);

或更短的:

#include <boost/spirit/include/qi_parse.hpp>
#include <boost/spirit/include/qi_numeric.hpp>
#include <boost/spirit/include/qi_auto.hpp>    
namespace qi = boost::spirit::qi;

std::string s("123");
int result = 0;
qi::parse(s.begin(), s.end(), result);

它基于 Spirit 的 auto 功能。如果你将其中一个包装成一个函数,你就会得到你想要的。

编辑:我现在才看到您使用的是 Boost 1.34。所以这里是对应的咒语:

#include <boost/spirit.hpp>

using namespace boost::spirit;

std::string s("123");
int result = 0;
std::string::iterator b = s.begin();
parse(b, s.end(), int_p[assign_a(result)]);

【讨论】:

  • 谢谢。我在我的分析器中看到它比 atoi 快 2.5 倍。
  • 至少对于 Boost 1.58,您必须更改包含才能使其编译。 parse 到 qi_parse。此外,您还必须添加 qi_auto 才能编译较短的版本。
【解决方案2】:

int i = boost::lexical_cast&lt;int&gt;(str);

【讨论】:

猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2013-09-26
相关资源
最近更新 更多