Menu
CoddyTech

Konwersja ciągów znaków

Część sekcji Podstawy ścieżki Rust w Coddy. Lekcja 71 z 75.

Aby przekonwertować typ liczbowy na ciąg znaków, możesz użyć metody to_string(). Ta metoda jest dostępna dla większości typów danych, w tym liczb całkowitych i zmiennoprzecinkowych.

Na przykład:

let number = 42;
let number_str = number.to_string();
println!("The number as a string: {}", number_str);

W tym przykładzie konwertujemy zmienną number typu i32 na String.

Aby przekonwertować ciąg znaków na typ liczbowy, możesz użyć metody parse(). Ta metoda zwraca wynik zawierający albo sparsowaną liczbę, albo błąd, jeśli konwersja się nie powiedzie.

Na przykład:

let number_str = "123";
let number: i32 = number_str.parse().unwrap();
println!("The number as an i32: {}", number);

W tym przykładzie konwertujemy ciąg znaków number_str na i32 za pomocą metody parse(). Metoda unwrap() służy do wyodrębnienia wartości z Result, przy założeniu, że konwersja się powiedzie.

Jeśli konwersja się nie powiedzie, program wywoła panikę (zakończy działanie błędem).

Możesz też użyć parse() z różnymi typami liczbowymi:

let float_str = "3.14";
let float_num: f64 = float_str.parse().unwrap();
println!("The number as an f64: {}", float_num);

W tym przypadku konwertujemy ciąg znaków float_str na f64.

challenge icon

Wyzwanie

Łatwy

Utwórz funkcję o nazwie convert_and_print, która przyjmuje trzy argumenty:

  1. Wycinek łańcucha znaków s: &str. To liczba zapisana jako tekst (np. "123.67"). Jest używany tylko wtedy, gdy to_string ma wartość false.
  2. Liczba zmiennoprzecinkowa n: f64. Jest używana tylko wtedy, gdy to_string ma wartość true.
  3. Wartość logiczna to_string: bool: określa, którą operację wykonać.

Funkcja powinna wykonać następujące operacje:

  • Jeśli to_string ma wartość true: zamień n na łańcuch znaków za pomocą .to_string(), a następnie policz, ile zawiera znaków cyfr (nie licz kropki . ani znaku minus -). Wypisz w formacie:
    Number: [string], Digits: [num of digits]

    Na przykład, jeśli n = -321.198623, jego postać łańcuchowa to "-321.198623", która zawiera 9 znaków cyfr (bez - i .).

    Podpowiedź: zamień n na łańcuch znaków, a następnie użyj na nim .len() i odejmij 1 za każdą zawartą w nim . lub -.
  • Jeśli to_string ma wartość false: sparsuj łańcuch s jako f64 za pomocą .parse(), a następnie rzutuj go na i32 (co usuwa część dziesiętną). Wypisz w formacie:
    String as number: [number]

    Na przykład, jeśli s = "123.67231", wynikiem jest String as number: 123.

Wywołaj convert_and_print dwa razy:

  1. Najpierw z wartością to_string ustawioną na false. Wykorzystuje to łańcuch s i ignoruje n.
  2. Następnie z wartością to_string ustawioną na true. Wykorzystuje to liczbę n i ignoruje s.

Spróbuj swoich sił

use std::io;

fn convert_and_print(s: &str, n: f64, to_string: bool) {
    // Wpisz tutaj swój kod
}

fn main() {
    let mut input_number_str = String::new();
    let mut input_n = String::new();

    io::stdin().read_line(&mut input_number_str).unwrap();
    io::stdin().read_line(&mut input_n).unwrap();

    let n: f64 = input_n.trim().parse().unwrap();
    let number_str = input_number_str.trim();

    // Wywołaj convert_and_print z to_string = false
    
    
    // Wywołaj convert_and_print z to_string = true
    
}
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Rust online