gpt4 book ai didi

rust - 如何在不进行手动解析的情况下从可能包含剩余字符的字符串中解析 float ?

转载 作者:行者123 更新时间:2023-12-03 11:44:35 24 4
gpt4 key购买 nike

如何在不进行手动解析(例如 JS 中的 parseFloat())的情况下从可能包含遗留字符的字符串中解析 float ,并找出它的结束位置?

一个例子是字符串 "2e-1!" .我想计算字符串中的下一个 float ,这样我就可以将这个字符串拆分成 "2e-1""!" (例如,如果我想实现一个计算器。)如果不编写解析器来查看 float 的结束位置,将其作为 &str,我将如何做到这一点 , 然后使用 .parse()

我知道这意味着我可能必须解析非标准的东西,例如 "3e+1+e3"3e+1 ( 30 ) 和 "+e3" .这是有意的;我不知道格式化 float 的所有方法,尤其是那些对 Rust 的 parse::<f64>() 有效的方法,但无论如何我都想处理它们。

我该怎么做,最好没有外部库?

最佳答案

如评论中所述,您需要实现自己的浮点解析器或使用外部库。标准库中的解析器 always errors out when it encounters additional junk in the input string – 它甚至不允许前导或尾随空格。

nom 是一个很好用的外部 crate。它带有 integrated parser for floating-point numbers满足您的要求。示例:

use nom::number::complete::double;
let parser = double::<_, ()>;
assert_eq!(parser("2.0 abc"), Ok((" abc", 2.0)));
let result = parser("Nanananananana hey, Jude!").unwrap();
assert_eq!(result.0, "ananananana hey, Jude!");
assert!(result.1.is_nan());

解析器期望 float 位于字符串的最开头。如果您想允许前导空格,您可以先使用 trim_start() 将其删除。

关于rust - 如何在不进行手动解析的情况下从可能包含剩余字符的字符串中解析 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64465527/

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