3

我听说精神在将字符串转换为 int 方面非常快。

但是,我无法创建一个可以这样做的简单函数。就像是

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

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

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

4

2 回答 2

11

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

#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)]);
于 2010-10-15T11:17:22.420 回答
3

int i = boost::lexical_cast<int>(str);

于 2010-10-15T08:31:10.700 回答