gpt4 book ai didi

rust - 如何在不通过String的情况下从Rust中的Vec 转换为u32?

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

我的rust代码在无法访问std::stringstd::*(但可以访问core::str)的环境中运行。如何不通过Vec<char>u32转换为String,例如:

let num_in_chars: Vec<char> = vec!['1', '2'];

// some process here
// let num = ...
// This is how I could do it if I have access to `String`
// let num = num_in_chars.iter().collect::<String>().parse::<u32>().unwrap();
assert_eq!(12, num);

谢谢

最佳答案

您必须将每个char转换为一个数字(在map中),然后将每个先前的结果乘以10,然后添加新的数字:

/// Returns `None` in case of invalid digit.
pub fn vec_to_int(digits: impl IntoIterator<Item = char>) -> Option<u32> {
const RADIX: u32 = 10;

digits
.into_iter()
.map(|c| c.to_digit(RADIX))
.try_fold(0, |ans, i| i.map(|i| ans * RADIX + i))
}

#[test]
fn it_works() {
let nums = vec!['1', '2'];
let num = vec_to_int(nums);

assert_eq!(Some(12), num);
}

#[test]
fn invalid_digit() {
let nums = vec!['1', 'a'];
let num = vec_to_int(nums);

assert_eq!(None, num);
}

关于rust - 如何在不通过String的情况下从Rust中的Vec <char>转换为u32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59191853/

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