String Output
Вывод строк
- Макрос
println!позволяет вывести строку в поток stdout;
// println!("Hello there!\n");
// раскрывается в такой код:
use std::io::{self, Write};
io::stdout().lock().write_all(b"Hello there!\n").unwrap();- Метод
len()выдаёт длину строки; - Метод
is_empty()проверят, что строка непустая; - Метод
contains()ищет одну строку в другой строке; - Метод
replace(from,to)заменяет часть строки на другую и выдаёт результат; - Метод
splt_whitespace()позволяет делить строку на части по пробелам; - Метод
push_str()позволяет добавить текст к строке (строка должна быть mut).
fn main() {
let mut a = String::from("Wonderful RUST World");
println!("Hello{}!", output_string(&a)); // вывод строки
println!("String is empty? {}", a.is_empty());
println!("String length: {}", a.len());
println!("Does string contain 'Hello'? {}", a.contains("Hello"));
println!("{}",a.replace("RUST","Python")); // Wonderful Python World
for i in a.split_whitespace() {
println!("{}", i);
}
a.push_str(" And let's go!");
println!("{}",a);
}
format!()
Макрос format! позволяет сформировать строку и вернуть из функции;
fn output_string(t: &String) -> String {
format!(", {}",t) // возврат сформированной строки
}При этом format!() позволяет конвертировать формат чисел.
Decimal -> HEX:
fn rgb(r: i32, g: i32, b: i32) -> String {
format!(
"{:02X}{:02X}{:02X}", // конвертация dec -> 2 символа UPPER hex
// {:02x} => конвертация в lower hex.
r.clamp(0, 255), // clamp задаёт валидный диапазон чисел
g.clamp(0, 255), // аналог == g.min(255).max(0)
b.clamp(0, 255))}
fn main() {
println!("{}", rgb(1, 2, 3)); // 010203
println!("{}", rgb(255, 255, 255)); // FFFFFF
println!("{}", rgb(-20, 275, 125)); // 00FF7D
}Decimal -> Binary:
let b = format!("{:b}", 42);
println!("{}", b); // 101010
Пример задачи
Нахождение закономерностей в структурах со строками
В примере мы передаём вектор из строк. Далее, анализируем его по частям:
fn likes(names: &[&str]) -> String {
match names {
[] => "no one likes this".to_string(),
[a] => format!("{} likes this", a),
[a, b] => format!("{} and {} like this", a, b),
[a, b, c] => format!("{}, {} and {} like this", a, b, c),
[a, b, other @ ..] => format!("{}, {} and {} others like this", a, b, other.len()),
}
}