String-Slices erstellen
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 55 von 66.
Da Sie nun den Unterschied zwischen String und &str verstehen, lernen wir, wie man String-Slices aus bestehenden Strings erstellt. Es gibt zwei Hauptmöglichkeiten, um ein &str aus einem String zu erstellen.
Der einfachste Weg ist die Verwendung des Referenz-Operators & mit Ihrem String. Dies erstellt einen Slice, der auf den gesamten String verweist:
let my_string = String::from("Hello World");
let slice: &str = &my_string; // Dies erstellt einen Slice des gesamten StringsSie können auch Slices von bestimmten Teilen eines Strings mithilfe der Range-Syntax erstellen. Das Format ist &string[start..end], wobei start der Startindex ist und end eins nach dem letzten Zeichen liegt, das Sie einschließen möchten. Diese Indizes sind vom Typ usize, was Rusts vorzeichenloser Ganzzahltyp für Indizierung und Größen ist — er kann nur Null oder positiv sein, was sinnvoll ist, da ein String-Index niemals negativ sein kann:
let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // Dies ergibt "Hello"
let second_word = &my_string[6..11]; // Dies ergibt "World"Aufgabe
EinfachSie erhalten zwei Eingaben. Die erste Eingabe ist ein vollständiger Satz, und die zweite Eingabe besteht aus zwei durch ein Leerzeichen getrennten Zahlen, die den Start- und Endindex für die Erstellung eines Slices darstellen. Erstellen Sie einen String aus der ersten Eingabe und erstellen Sie dann einen String-Slice unter Verwendung des durch die beiden Indizes angegebenen Bereichs. Geben Sie den ursprünglichen String in der ersten Zeile und den extrahierten Slice in der zweiten Zeile aus.
Anforderungen:
- Lesen Sie die erste Eingabe (den vollständigen Satz) ein und entfernen Sie Leerzeichen am Anfang und Ende (trim)
- Erstellen Sie einen
Stringaus dieser Eingabe - Lesen Sie die zweite Eingabe (zwei durch ein Leerzeichen getrennte Zahlen) ein und entfernen Sie Leerzeichen am Anfang und Ende (trim)
- Teilen Sie die zweite Eingabe am Leerzeichen auf, um den Start- und Endindex zu erhalten
- Parsen Sie beide Indizes zu
usize - Erstellen Sie einen String-Slice mit der Range-Syntax
&string[start..end] - Geben Sie den ursprünglichen String aus
- Geben Sie den extrahierten Slice aus
Eingabe:
- Erste Zeile: Ein Satz (z. B.
Hello World) - Zweite Zeile: Zwei durch ein Leerzeichen getrennte Zahlen (z. B.
0 5)
Ausgabe:
- Erste Zeile: Der ursprüngliche String
- Zweite Zeile: Der extrahierte Slice
Spickzettel
Es gibt zwei Hauptwege, um ein &str aus einem String zu erstellen.
Verwenden Sie den Referenzoperator &, um einen Slice des gesamten Strings zu erstellen:
let my_string = String::from("Hello World");
let slice: &str = &my_string;Verwenden Sie die Range-Syntax &string[start..end], um Slices von bestimmten Teilen zu erstellen:
let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // "Hello"
let second_word = &my_string[6..11]; // "World"Der start-Index ist inklusiv und der end-Index ist exklusiv (eins nach dem letzten Zeichen).
Probier es selbst
use std::io;
fn main() {
// Lies die erste Eingabe (den vollständigen Satz)
let mut sentence = String::new();
io::stdin().read_line(&mut sentence).expect("Failed to read line");
let sentence = sentence.trim();
// Lies die zweite Eingabe (zwei durch ein Leerzeichen getrennte Zahlen)
let mut indices = String::new();
io::stdin().read_line(&mut indices).expect("Failed to read line");
let indices = indices.trim();
// TODO: Schreibe deinen Code unten
// Analysiere die Indizes und erstelle den String-Slice
// Gib den ursprünglichen String und den Slice aus
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code6Umgang mit fehlenden Werten mit 'Option'
Was ist ein 'Option'?'match' mit 'Option' verwendenis_some() und is_none()Ein 'Option' entpackenDie 'expect'-MethodeStandardwert bereitstellen: unwrap_orRückblick – Ein Element finden9String-Slices und mehr
String vs. &strString-Slices erstellenSlices als FunktionsparameterWeitere SlicesRückblick – Das erste Wort finden