gpt4 book ai didi

c++ - 解析数字 boost 灵气

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:45 29 4
gpt4 key购买 nike

我正在使用 boost spirit 解析语法,所有复杂的部分都运行良好;但是,我试图接受数字变量,但似乎无法正确解析它们。除了将数字存储为字符串外,我不想对这些数字做任何事情,但我似乎无法获得与通用数字匹配的字符串解析器。

这是显示问题的代码:

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

int main()
{
std::vector<std::string> testVec;
testVec.push_back("25.16");
testVec.push_back("2516");
std::string result;
std::string::const_iterator it, endIt;

for (unsigned int i = 0; i < testVec.size(); ++i)
{
it = testVec[i].begin();
endIt = testVec[i].end();
result.clear();

std::cout << "test" << i << "a: ";
bool r = qi::phrase_parse(
it,
endIt,
+qi::digit >> -(qi::string(".") >> +qi::digit),
qi::space,
result
);

if (!r || it != endIt)
{
std::cout << "failed" << std::endl;
}
else
{
std::cout << result << std::endl;
}

it = testVec[i].begin();
endIt = testVec[i].end();
result.clear();

std::cout << "test" << i << "b: ";
r = qi::phrase_parse(
it,
endIt,
+qi::digit >> (qi::string(".") >> +qi::digit),
qi::space,
result
);

if (!r || it != endIt)
{
std::cout << "failed" << std::endl;
}
else
{
std::cout << result << std::endl;
}
}

return 0;
}

输出是:

test0a: 25.
test0b: 25.16
test1a: 2516
test1b: failed

第二种方法的行为与预期一致,只是简单地将小数部分设为可选会更改结果以排除小数点后的数字。

感谢任何帮助。

编辑: 想要这样做的原因是我正在解析一种语法以翻译成略有不同的语法。显然,两者对数字的处理方式相同,所以我不关心数字是什么,只关心它的格式是否正确。

最佳答案

可能是你的boost spirit版本有问题?这是我的程序输出:

$ ./a.exe
test0a: 25.16
test0b: 25.16
test1a: 2516
test1b: failed

这是我期望的结果。

here is an online compile/run of your code

关于c++ - 解析数字 boost 灵气,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20228908/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com