Menu
Coddy logo textTech

Slices als Funktionsparameter

Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 56 von 66.

Beim Schreiben von Funktionen, die mit Strings arbeiten, macht die Verwendung von &str als Parametertyp anstelle von String Ihre Funktionen viel flexibler und nützlicher.

Eine Funktion, die einen String-Parameter erwartet, kann nur Strings im Besitz (owned strings) akzeptieren, was die Art und Weise einschränkt, wie man sie aufrufen kann:

fn print_message(text: String) {
    println!("{}", text);
}

// Dies funktioniert, übernimmt aber den Besitz
let my_string = String::from("Hello");
print_message(my_string); // my_string ist danach nicht mehr verwendbar

Eine Funktion, die &str entgegennimmt, kann jedoch sowohl String-Referenzen als auch String-Literale akzeptieren, was sie viel vielseitiger macht:

fn print_message(text: &str) {
    println!("{}", text);
}

// Jetzt können Sie sie mit beiden Typen aufrufen
let my_string = String::from("Hello");
print_message(&my_string); // Eine Referenz auf String übergeben
print_message("World");     // Ein String-Literal direkt übergeben

Diese Flexibilität bedeutet, dass Ihre Funktionen in mehr Situationen funktionieren, ohne die Aufrufer zu zwingen, ihre Daten zu konvertieren oder das Eigentum aufzugeben.

challenge icon

Aufgabe

Einfach

Du erhältst zwei Eingaben. Die erste Eingabe ist eine Textnachricht und die zweite Eingabe ist die maximal zulässige Länge der Nachricht. Erstelle eine Funktion namens truncate_message, die einen String-Slice (&str) und eine maximale Länge (usize) als Parameter entgegennimmt. Wenn die Länge der Nachricht die maximale Länge überschreitet, soll die Funktion einen Slice der Nachricht bis zur maximalen Länge zurückgeben. Andernfalls soll sie die gesamte Nachricht zurückgeben. Gib das Ergebnis aus.

Anforderungen:

  • Lies die erste Eingabe (die Textnachricht) ein und entferne die Leerzeichen
  • Lies die zweite Eingabe (die maximale Länge) ein und entferne die Leerzeichen
  • Wandle die maximale Länge in usize um
  • Definiere eine Funktion truncate_message, die zwei Parameter entgegennimmt:
    • Einen String-Slice &str für die Nachricht
    • Ein usize für die maximale Länge
  • Prüfe innerhalb der Funktion, ob die Länge der Nachricht größer als die maximale Länge ist
  • Wenn ja, gib einen Slice der Nachricht vom Index 0 bis zur maximalen Länge mit &message[0..max_len] zurück
  • Wenn nein, gib die gesamte Nachricht zurück
  • Rufe die Funktion mit der Eingabenachricht und der maximalen Länge auf
  • Gib das zurückgegebene Ergebnis aus

Eingabe:

  • Erste Zeile: Eine Textnachricht (z. B. Hello World from Rust)
  • Zweite Zeile: Maximale Länge als Zahl (z. B. 11)

Ausgabe:

  • Die gekürzte Nachricht, wenn sie die maximale Länge überschreitet, andernfalls die vollständige Nachricht

Probier es selbst

use std::io;

// TODO: Definiere hier die Funktion truncate_message


fn main() {
    // Lies die Textnachricht ein
    let mut message = String::new();
    io::stdin().read_line(&mut message).expect("Failed to read line");
    let message = message.trim();
    
    // Lies die maximale Länge ein
    let mut max_length_input = String::new();
    io::stdin().read_line(&mut max_length_input).expect("Failed to read line");
    let max_len: usize = max_length_input.trim().parse().expect("Invalid number");
    
    // TODO: Rufe die Funktion truncate_message auf und speichere das Ergebnis
    
    // TODO: Gib das Ergebnis aus
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss

Übe selbstständig: Online-Rust-Compiler