Menu
Coddy logo textTech

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 liczb 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 niepowodzeniem).

Możesz także 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 ciągu 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: liczba zmiennoprzecinkowa. 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: przekonwertuj n na ciąg znaków za pomocą .to_string(), a następnie policz, ile zawiera znaków będących cyframi (nie licz kropki . ani znaku minus -). Wypisz wynik w formacie:
    Number: [string], Digits: [num of digits]

    Na przykład, jeśli n = -321.198623, jego postać tekstowa to "-321.198623", która zawiera 9 znaków będących cyframi (bez - i .).

    Podpowiedź: przekonwertuj n na ciąg 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 ciąg znaków s jako f64 za pomocą .parse(), a następnie rzutuj go na i32 (co usuwa część dziesiętną). Wypisz wynik 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 parametrem to_string ustawionym na false. Wykorzystuje to ciąg znaków s i ignoruje n.
  2. Następnie z parametrem to_string ustawionym 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