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.
Thử thách
DễTạo một hàm có tên convert_and_print nhận ba đối số:
- 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 khito_stringlàfalse. - Một số thực
n: f64: một số dấu phẩy động. Giá trị này chỉ được dùng khito_stringlàtrue. - 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_stringlàtrue: chuyểnnthà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ếun = -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ểnnthà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_stringlàfalse: phân tích chuỗisthànhf64bằng cách dùng.parse(), sau đó ép kiểu thànhi32(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ếus = "123.67231", đầu ra làString as number: 123.
Gọi convert_and_print hai lần:
- Lần đầu, đặt
to_stringthànhfalse. Lần gọi này dùng chuỗisvà bỏ quan. - Lần thứ hai, đặt
to_stringthànhtrue. Lần gọi này dùng sốnvà bỏ quas.
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
}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
5Các toán tử phần 2
Các toán tử logic phần 1Các toán tử logic phần 2Ôn tập: logic đơn giảnCác toán tử logic phần 33Biến phần 2
Khai báo kiểu dữ liệuQuy ước đặt tênSuy luận kiểu dữ liệuÔn tập: Khởi tạo biếnÉp kiểu dữ liệu9Vòng lặp
Vòng lặp for qua chuỗiVòng lặp whileBreakContinueVòng lặp lồng nhauNhãn vòng lặpVòng lặp vô hạnÔn tập: Đầu vào động12Kiến thức cơ bản về mảng
Khai báo mảngMảng làm tham sốTruy cập phần tửChỉnh sửa mảngÔn tập: In mảng đẹp mắtTự luyện tập: Trình biên dịch Rust online