Menu
Coddy logo textTech

Преобразование строк

Часть раздела Fundamentals путешествия по Rust на Coddy — урок 71 из 75.

Чтобы преобразовать числовой тип в строку, вы можете использовать метод to_string(). Этот метод доступен для большинства типов данных, включая целые числа и числа с плавающей запятой.

Например:

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

В этом примере мы преобразуем переменную number типа i32 в String.

Чтобы преобразовать строку в числовой тип, вы можете использовать метод parse(). Этот метод возвращает результат, который содержит либо преобразованное число, либо ошибку, если преобразование не удалось.

Например:

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

В этом примере мы преобразуем строку number_str в i32 с помощью метода parse(). Метод unwrap() используется для извлечения значения из Result, предполагая, что преобразование прошло успешно.

Если преобразование завершится неудачей, программа запаникует (завершится с ошибкой).

Вы также можете использовать parse() с различными числовыми типами:

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

В этом случае мы преобразуем строку float_str в f64.

challenge icon

Задание

Легко

Создайте функцию с именем convert_and_print, которая принимает три аргумента:

  1. Срезовую строку s: &str — это число, записанное в виде текста (например, "123.67"). Оно используется только тогда, когда to_string имеет значение false.
  2. Число с плавающей запятой n: f64. Оно используется только тогда, когда to_string имеет значение true.
  3. Булево значение to_string: bool — определяет, какую операцию следует выполнить.

Функция должна выполнять следующие операции:

  • Если to_string имеет значение true: преобразуйте n в строку с помощью .to_string(), затем подсчитайте, сколько цифровых символов она содержит (не считайте точку . или знак минуса -). Выведите результат в формате:
    Number: [string], Digits: [num of digits]

    Например, если n = -321.198623, его строковая форма — "-321.198623", которая содержит 9 цифровых символов (не считая - и .).

    Подсказка: преобразуйте n в строку, затем используйте .len() и вычтите 1 за каждый символ . или -, который она содержит.
  • Если to_string имеет значение false: преобразуйте строку s в тип f64 с помощью .parse(), затем приведите её к типу i32 (что отбросит десятичную часть). Выведите результат в формате:
    String as number: [number]

    Например, если s = "123.67231", результат будет String as number: 123.

Вызовите convert_and_print дважды:

  1. Первый раз с to_string, установленным в false — при этом используется строка s и игнорируется n.
  2. Второй раз с to_string, установленным в true — при этом используется число n и игнорируется s.

Шпаргалка

Чтобы преобразовать числовой тип в строку, используйте метод to_string():

let number = 42;
let number_str = number.to_string();

Чтобы преобразовать строку в числовой тип, используйте метод parse():

let number_str = "123";
let number: i32 = number_str.parse().unwrap();

Метод parse() работает с различными числовыми типами:

let float_str = "3.14";
let float_num: f64 = float_str.parse().unwrap();

Метод unwrap() извлекает значение из Result. Если преобразование не удастся, программа завершится с ошибкой (panic).

Попробуйте сами

use std::io;

fn convert_and_print(s: &str, n: f64, to_string: bool) {
    // Напишите свой код здесь
}

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();

    // Вызовите convert_and_print с to_string = false
    
    
    // Вызовите convert_and_print с to_string = true
    
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Fundamentals