Как Rust считает количество вводимых символов из клавиатуры?
use std::io;
fn main() {
println!("Hello enter your string and i'm count the number of charaster in if.");
let mut s1 = String::new();
io::stdin()
.read_line(&mut s1)
.expect("Some text...");
let (s2, len) = calculate_length(s1);
println!("The length of '{}' is {}.", s2, len);
}
fn calculate_length(s: String) -> (String, String) {
let length = s.len() - 1; // len() returns the length of a String
(s, length.to_string())
}
Доброго времени суток, уважаемые пользователи. Подскажите пожалуйста как в Rust происходит счет символов, которые пользователь вводит с клавиатуры? Что нужно изменить в коде чтобы результат выполнения функции calculate_length выводился корректно?
Ответы (2 шт):
Для строк Rust использует кодировку UTF-8. В этой кодировке кириллица кодируется с помощью 2 байт. Соответственно длинна строки для русских букв будет в 2 раза больше.
Для подсчёта количества символов можно создать итератор по Char и подсчитать в нём количество элементов.
let length = s.trim().chars().count();
Ответ зависит от того, что считать "символом". Итераторы, возвращаемые методами .chars() и .char_indices(), позволяют сосчитать скалярные значения Unicode, из которых состоит строка. Но это не обязательно соответствует количеству графических или логических символов человеческого языка. В стандартной библиотеке нет полной поддержки стандартов Unicode, регламентирующих различные метрики текста, но можно воспользоваться библиотеками расширения из проекта unicode-rs: