497 Stimmen

Wandeln Sie einen String in eine Ganzzahl um?

Hinweis: Diese Frage enthält veralteten Code vor Version 1.0! Die Antwort ist jedoch korrekt.

Um eine str in ein int in Rust umzuwandeln, kann ich dies tun:

let my_int = from_str::(my_str);

Der einzige Weg, den ich kenne, um eine String in ein int umzuwandeln, besteht darin, einen Teil davon zu bekommen und dann from_str wie folgt zu verwenden:

let my_int = from_str::(my_string.as_slice());

Gibt es eine Möglichkeit, eine String direkt in ein int umzuwandeln?

689voto

John Vrbanac Punkte 7014

Sie können direkt in ein int konvertieren, indem Sie die str::parse::()-Methode verwenden, die einen Result zurückgibt, welcher das int enthält.

let my_string = "27".to_string();  // `parse()` funktioniert mit `&str` und `String`!
let my_int = my_string.parse::().unwrap();

Sie können entweder den Typ, in den konvertiert werden soll, mit dem Turbofisch-Operator (::<>) wie oben gezeigt angeben oder über explizite Typenannotation:

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

Da parse() ein Result zurückgibt, wird es entweder ein Err sein, wenn der String nicht als der angegebene Typ geparst werden konnte (zum Beispiel kann der String "peter" nicht als i32 geparst werden), oder ein Ok mit dem Wert darin.

130voto

Jared Beck Punkte 15494
let my_u8: u8 = "42".parse().unwrap();
let my_u32: u32 = "42".parse().unwrap();

// oder, um sicher zu sein, passen Sie den `Err` an
match "foobar".parse::() {
  Ok(n) => do_something_with(n),
  Err(e) => weep_and_moan(),
}

str::parse:: gibt ein Result zurück und Result::unwrap "Entpackt ein Ergebnis und gibt den Inhalt eines Ok zurück oder wirft einen Fehler, wenn der Wert ein Err ist, wobei eine Panikmeldung vom Wert des Err bereitgestellt wird."

str::parse ist eine generische Funktion, daher der Typ in spitzen Klammern.

60voto

Ade Yahya Punkte 737

Wenn Sie Ihren String von stdin().read_line erhalten, müssen Sie ihn zuerst trimmen.

let my_num: i32 = my_num.trim().parse()
   .expect("bitte geben Sie mir eine korrekte Zeichenfolgennummer!");

15voto

DK. Punkte 48725

Mit einem aktuellen Nightly können Sie dies tun:

let my_int = from_str::(&*my_string);

Was hier passiert, ist dass String jetzt in ein str dereferenziert werden kann. Die Funktion benötigt jedoch ein &str, also müssen wir erneut ausleihen. Zur Information, ich glaube, dass dieses bestimmte Muster (&*) "Cross-Borrowing" genannt wird.

11voto

AlexaP Punkte 141

Ja, Sie können die parse-Methode auf einen String verwenden, um ihn direkt in eine Ganzzahl umzuwandeln, wie folgt:

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

Die parse-Methode gibt ein Result-Objekt zurück, daher müssen Sie den Fall behandeln, in dem der String nicht in eine Ganzzahl umgewandelt werden kann. Sie können unwrap wie oben gezeigt verwenden, um den Wert zu erhalten, wenn das Parsen erfolgreich war, oder es wird einen Fehler ausgeben, wenn das Parsen fehlgeschlagen ist.

Oder Sie können den match-Ausdruck verwenden, um die Erfolgs- und Fehlerfälle getrennt zu behandeln, wie folgt:

let my_string = "42".to_string();
let my_int = match my_string.parse::() {
    Ok(n) => n,
    Err(_) => {
        println!("Konnte Ganzzahl nicht parsen");
        0
    },
};

Zur Information: Die parse-Methode ist für jeden Typ verfügbar, der das FromStr-Trait implementiert, was alle ganzzahligen Typen (z. B. i32, i64 usw.) sowie viele andere Typen wie f32 und bool einschließt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X