Menu
Coddy logo textTech

Wycinki jako parametry funkcji

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 56 z 66.

Podczas pisania funkcji, które działają na ciągach znaków, użycie &str jako typu parametru zamiast String sprawia, że funkcje są znacznie bardziej elastyczne i przydatne.

Funkcja, która przyjmuje parametr typu String, może przyjmować tylko ciągi znaków będące własnością wywołującego, co ogranicza sposób jej wywoływania:

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

// To działa, ale przejmuje własność
let my_string = String::from("Hello");
print_message(my_string); // Po tym nie można już używać my_string

Jednak funkcja przyjmująca &str może akceptować zarówno referencje do String, jak i literały łańcuchowe, dzięki czemu jest znacznie bardziej wszechstronna:

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

// Teraz możesz wywołać ją z argumentem dowolnego z tych typów
let my_string = String::from("Hello");
print_message(&my_string); // Przekaż referencję do String
print_message("World");     // Przekaż bezpośrednio literał tekstowy

Ta elastyczność oznacza, że Twoje funkcje sprawdzają się w większej liczbie sytuacji, nie zmuszając wywołujących ich do konwertowania danych ani rezygnowania z ich własności.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa dane wejściowe. Pierwszym jest wiadomość tekstowa, a drugim maksymalna dozwolona długość wiadomości. Utwórz funkcję o nazwie truncate_message, która przyjmuje jako parametry wycinek ciągu znaków (&str) i maksymalną długość (usize). Jeśli długość wiadomości przekracza maksymalną długość, funkcja powinna zwrócić wycinek wiadomości o długości równej tej maksymalnej długości. W przeciwnym razie powinna zwrócić całą wiadomość. Wypisz wynik.

Wymagania:

  • Odczytaj pierwsze dane wejściowe (wiadomość tekstową) i usuń białe znaki z jej początku i końca
  • Odczytaj drugie dane wejściowe (maksymalną długość) i usuń białe znaki z jej początku i końca
  • Przekształć maksymalną długość na typ usize
  • Zdefiniuj funkcję truncate_message, która przyjmuje dwa parametry:
    • Wycinek ciągu znaków &str reprezentujący wiadomość
    • Wartość typu usize określającą maksymalną długość
  • Wewnątrz funkcji sprawdź, czy długość wiadomości jest większa niż maksymalna długość
  • Jeśli tak, zwróć wycinek wiadomości od indeksu 0 do maksymalnej długości, używając &message[0..max_len]
  • Jeśli nie, zwróć całą wiadomość
  • Wywołaj funkcję, przekazując jej wiadomość wejściową i maksymalną długość
  • Wypisz zwrócony wynik

Dane wejściowe:

  • Pierwszy wiersz: wiadomość tekstowa (np. Hello World from Rust)
  • Drugi wiersz: maksymalna długość jako liczba (np. 11)

Wynik:

  • Skrócona wiadomość, jeśli przekracza maksymalną długość, lub cała wiadomość w przeciwnym razie

Spróbuj swoich sił

use std::io;

// TODO: Zdefiniuj tutaj funkcję truncate_message


fn main() {
    // Wczytaj wiadomość tekstową
    let mut message = String::new();
    io::stdin().read_line(&mut message).expect("Failed to read line");
    let message = message.trim();
    
    // Wczytaj maksymalną długość
    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: Wywołaj funkcję truncate_message i zapisz wynik
    
    // TODO: Wyświetl wynik
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online