我试图找到一个给定数字的数字之和.例如,134等于8.

我的计划是使用.to_string()将数字转换为字符串,然后使用.chars()将数字作为字符进行迭代.然后,我想将迭代中的每char个变量转换成一个整数,并将其添加到一个变量中.我想得到这个变量的最终值.

我try 使用下面的代码将char转换为整数:

fn main() {
    let x = "123";
    for y in x.chars() {
        let z = y.parse::<i32>().unwrap();
        println!("{}", z + 1);
    }
}

(Playground)

但它会导致这个错误:

error[E0599]: no method named `parse` found for type `char` in the current scope
 --> src/main.rs:4:19
  |
4 |         let z = y.parse::<i32>().unwrap();
  |                   ^^^^^

这段代码正是我想做的,但首先我必须将每个char转换成一个字符串,然后转换成一个整数,然后将sum乘以z.

fn main() {
    let mut sum = 0;
    let x = 123;
    let x = x.to_string();
    for y in x.chars() {
        // converting `y` to string and then to integer
        let z = (y.to_string()).parse::<i32>().unwrap();
        // incrementing `sum` by `z`
        sum += z;
    }
    println!("{}", sum);
}

(Playground)

推荐答案

你需要的方法是char::to_digit.它将char转换为给定基数的数字.

您还可以使用Iterator::sum方便地计算序列的和:

fn main() {
    const RADIX: u32 = 10;
    let x = "134";
    println!("{}", x.chars().map(|c| c.to_digit(RADIX).unwrap()).sum::<u32>());
}

Rust相关问答推荐

trait 中self 的显式生命周期似乎导致E0499无法在循环中多次borrow * emits 器作为可变的

如何实现泛型枚举的`Serde::Desialize`特性

如何为 struct 字段设置新值并在Ruust中的可变方法中返回旧值

有没有一种惯用的方法来判断VEC中是否存在变体?

如果包名称与bin名称相同,并且main.ars位于工作区的同一 crate 中,则无法添加对lib.ars的依赖

无法实现整型类型的泛型FN

Rust proc_macro 和 syn:解析空格

为什么将易错函数的泛型结果作为泛型参数传递 infer ()?不应该是暧昧的吗?

将引用移动到线程中

注释闭包参数强调使用高阶排定特征界限

Rust 打包在 .deb 中

我如何取消转义,在 Rust 中多次转义的字符串?

有没有办法通过命令获取 Rust crate 的可安装版本列表?

如何使用泛型满足 tokio 异步任务中的生命周期界限

&self 参数在 trait 的功能中是必需的吗?

If let expression within .iter().any

Rust 中函数的类型同义词

为什么 Rust 编译器在移动不可变值时执行复制?

制作嵌套迭代器的迭代器

将数据序列化为 struct 模型,其中两个字段的数据是根据 struct 中的其他字段计算的