使用 boostspirit 将字符串解析为 int 或 float

发布于 2024-11-30 10:02:28 字数 235 浏览 0 评论 0原文

我需要将 wstring 解析为 int、float 或字符串本身。我发现了一个与我类似的问题这里但我不明白如何使用解析器。我没有找到 test_parser 方法。问题是:实现解析器的自定义规则后,如何使用它们?

I need to parse a wstring to int, float or a string itself. I found a question similar to mine Here but I don't understand how to use the parser. I don't find the test_parser method. The question is: after implementing the custom rules for the parser, how to use them?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

油焖大侠 2024-12-07 10:02:28

将 wstring 解析为 int 很简单:

wstring str(L"1234");
int i = 0;
qi::parse(str.begin(), str.end(), qi::int_, i);
assert(i == 1234);

类似地,解析 float 看起来像:

wstring str(L"1234.567");
double d = 0;
qi::parse(str.begin(), str.end(), qi::double_, d);
assert(d == 1234.567);

我不确定“解析字符串”是什么意思。如果您的意思是解析带引号的字符串,您可以将其写为:

wstring str(L"\"abc\"");
wstring s;
qi::parse(str.begin(), str.end(), '"' >> *~qi::char_('"') >> '"', s);
assert(s == L"abc");

表达式 '"' >> *~qi::char_('"') >> '"' 表示:引号 ('"') 后跟 (>>) 零个或多个 (* ) 不是引号的字符 (~qi::char_('"')) 后跟 (>>) 另一个引号 ('"') 。

Parsing a wstring to an int is straight forward:

wstring str(L"1234");
int i = 0;
qi::parse(str.begin(), str.end(), qi::int_, i);
assert(i == 1234);

Similarily, parsing a float looks like:

wstring str(L"1234.567");
double d = 0;
qi::parse(str.begin(), str.end(), qi::double_, d);
assert(d == 1234.567);

I'm not sure what you mean by 'parsing a string'. If you mean it as parsing a quoted string you could write it as:

wstring str(L"\"abc\"");
wstring s;
qi::parse(str.begin(), str.end(), '"' >> *~qi::char_('"') >> '"', s);
assert(s == L"abc");

the expession '"' >> *~qi::char_('"') >> '"' means: a quote ('"') followed by (>>) zero or more (*) characters which are not a quote (~qi::char_('"')) followed by (>>) another quote ('"') .

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文