Menu
CoddyTech

Chuyển đổi chuỗi

Thuộc phần Kiến thức nền tảng trong hành trình Rust của Coddy. Bài học 71 trên 75.

Để chuyển kiểu số thành chuỗi, bạn có thể dùng phương thức to_string(). Phương thức này có trong hầu hết các kiểu dữ liệu, bao gồm số nguyên và số thực.

Ví dụ:

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

Trong ví dụ này, chúng ta chuyển đổi biến (variable) number có kiểu i32 thành String.

Để chuyển một chuỗi sang kiểu dữ liệu số, bạn có thể dùng phương thức parse(). Phương thức này trả về một kết quả chứa số đã phân tích hoặc lỗi nếu quá trình chuyển đổi thất bại.

Ví dụ:

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

Trong ví dụ này, chúng ta chuyển đổi chuỗi number_str thành i32 bằng phương thức parse(). Phương thức unwrap() dùng để lấy giá trị từ Result, với giả định rằng việc chuyển đổi thành công.

Nếu chuyển đổi thất bại, chương trình sẽ panic (gặp lỗi).

Bạn cũng có thể dùng parse() với các kiểu số khác nhau:

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

Trong trường hợp này, chúng ta chuyển đổi chuỗi float_str sang f64.

challenge icon

Thử thách

Dễ

Tạo một hàm có tên convert_and_print nhận ba đối số:

  1. Một lát chuỗi s: &str. Đây là một số được viết dưới dạng văn bản (ví dụ: "123.67"). Giá trị này chỉ được dùng khi to_string là false.
  2. Một số thực n: f64: một số dấu phẩy động. Giá trị này chỉ được dùng khi to_string là true.
  3. Một giá trị Boolean to_string: bool: xác định thao tác cần thực hiện.

Hàm cần thực hiện các thao tác sau:

  • Nếu to_string là true: chuyển n thành chuỗi bằng cách dùng .to_string(), sau đó đếm số ký tự chữ số có trong chuỗi (không đếm dấu chấm . hoặc dấu trừ -). In ra theo định dạng:
    Number: [string], Digits: [num of digits]

    Ví dụ, nếu n = -321.198623, dạng chuỗi của nó là "-321.198623", có 9 ký tự chữ số (không tính - và .).

    Gợi ý: chuyển n thành chuỗi, sau đó dùng .len() trên chuỗi đó và trừ đi 1 cho mỗi dấu . hoặc - có trong chuỗi.
  • Nếu to_string là false: phân tích chuỗi s thành f64 bằng cách dùng .parse(), sau đó ép kiểu thành i32 (thao tác này sẽ bỏ phần thập phân). In ra theo định dạng:
    String as number: [number]

    Ví dụ, nếu s = "123.67231", đầu ra là String as number: 123.

Gọi convert_and_print hai lần:

  1. Lần đầu, đặt to_string thành false. Lần gọi này dùng chuỗi s và bỏ qua n.
  2. Lần thứ hai, đặt to_string thành true. Lần gọi này dùng số n và bỏ qua s.

Tự làm thử

use std::io;

fn convert_and_print(s: &str, n: f64, to_string: bool) {
    // Viết code của bạn ở đây
}

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

    // Gọi convert_and_print với to_string = false
    
    
    // Gọi convert_and_print với to_string = true
    
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Rust online