rust 是否将字符串转换为int?

c8ib6hqw  于 2022-12-23  发布在  其他
关注(0)|答案(8)|浏览(356)

注意:此问题包含已弃用的1.0之前的代码!但答案是正确的。

要在Rust中将str转换为int,可以执行以下操作:

let my_int = from_str::<int>(my_str);

我知道如何将String转换为int的唯一方法是获取它的一个切片,然后在其上使用from_str,如下所示:

let my_int = from_str::<int>(my_string.as_slice());

有没有办法直接将String转换为int

u5rb5r59

u5rb5r591#

您可以使用str::parse::<T>()方法直接转换为int,其中returns a Result包含int。

let my_string = "27".to_string();  // `parse()` works with `&str` and `String`!
let my_int = my_string.parse::<i32>().unwrap();

可以如上所示使用turbofish操作符(::<>)或通过显式类型注解指定要解析的类型:

let my_int: i32 = my_string.parse().unwrap();

由于parse()返回一个Result,所以如果字符串不能被解析为指定的类型(例如,字符串"peter"不能被解析为i32),它将是一个Err,或者是一个包含值的Ok

pepwfjgg

pepwfjgg2#

let my_u8: u8 = "42".parse().unwrap();
let my_u32: u32 = "42".parse().unwrap();

// or, to be safe, match the `Err`
match "foobar".parse::<i32>() {
  Ok(n) => do_something_with(n),
  Err(e) => weep_and_moan(),
}

str::parse::<u32>返回Result<u32, core::num::ParseIntError>Result::unwrap“展开结果,生成Ok的内容[或]如果值是Err,则会出现异常,并由Err的值提供异常消息。”
str::parsegeneric function,因此类型在尖括号中。

7dl7o3gd

7dl7o3gd3#

如果从stdin().read_line得到字符串,则必须首先修剪它。

let my_num: i32 = my_num.trim().parse()
   .expect("please give me correct string number!");
mitkmikd

mitkmikd4#

对于最近的每晚,您可以执行以下操作:

let my_int = from_str::<int>(&*my_string);

这里发生的事情是String现在可以被解引用为str。然而,函数需要&str,所以我们必须再次借用。作为参考,我相信这个特定的模式(&*)被称为“交叉借用”。

relj7zay

relj7zay5#

您可以使用FromStr trait的from_str方法,该方法是为i32实现的:

let my_num = i32::from_str("9").unwrap_or(0);
o4tp2gmn

o4tp2gmn6#

嗯,没有。为什么要有呢?如果你不再需要它了,就把它扔掉。
当你只需要读取一个字符串时,&strString更有用,因为它只是原始数据的一个视图,而不是它的所有者。你可以比String更容易地传递它,而且它是可复制的,所以它不会被调用的方法使用。在这方面,它更通用:如果你有一个String,你可以把它传递给期望&str的地方,但是如果你有&str,你只能把它传递给期望String的函数,如果你做了一个新的分配。
您可以找到更多关于这两者之间的差异以及何时在official strings guide中使用它们的信息。

e4eetjau

e4eetjau7#

所以基本上你想把一个字符串转换成一个整数对吧!这里是我最常用的,这也是在官方文档中提到的。

fn main() {

    let char = "23";
    let char : i32 = char.trim().parse().unwrap();
    println!("{}", char + 1);

}

这对String和&str都有效,希望这也能有所帮助。

polkgigr

polkgigr8#

是的,您可以使用字符串的解析方法直接将其转换为整数,如:

let my_string = "42".to_string();
let my_int = my_string.parse::<i32>().unwrap();

parse方法返回一个Result对象,因此您需要处理字符串不能解析为整数的情况。如果解析成功,您可以使用如上所示的unwrap来获取值,如果解析失败,它将出现异常。
或者,您可以使用match表达式分别处理成功和失败的情况,如下所示:

let my_string = "42".to_string();
let my_int = match my_string.parse::<i32>() {
    Ok(n) => n,
    Err(_) => {
        println!("Failed to parse integer");
        0
    },
};

仅供参考,parse方法可用于实现FromStr特征的任何类型,包括所有整数类型(例如i32、i64等)以及许多其他类型,如f32和bool。

相关问题