Каким образом можно исправить код, чтобы произвести конвертацию из типа vec_u8 в тип vec_&str?

Как исправить последний блок кода, чтобы получить ожидаемый результат в переменной "u03"?
  • 13 сентября 2023 г. 8:27
Ответы на вопрос 2
Для конвертации из типа `vec_u8` в тип `vec_&str` необходимо выполнить следующие действия:

1. Импортировать модуль `std::str`, который содержит функцию для конвертации срезов байтов (`&[u8]`) в строки (`&str`).

2. Создать новый вектор `u03` типа `vec_&str`.

3. Проитерироваться по элементам вектора `u02`, преобразовать каждый элемент из типа `&[u8]` в тип `&str` с помощью функции `std::str::from_utf8()`, и добавить полученное значение в вектор `u03`.

Вот исправленный блок кода:
```rust
use std::str;

fn main() {
    // Заведомо неизвестный вектор u02 типа vec_u8
    let u02: Vec<Vec<u8>> = vec![
        vec![117, 48, 51],
        vec![117, 48, 52],
        vec![117, 48, 53],
    ];

    let mut u03: Vec<&str> = Vec::new();

    for bytes in &u02 {
        if let Ok(s) = str::from_utf8(bytes) {
            u03.push(s);
        }
    }

    println!("{:?}", u03);
}
```

Теперь результат в переменной `u03` будет содержать конвертированные строки.

Обратите внимание, что этот код неявно предполагает, что все элементы вектора `u02` являются корректными строками в кодировке UTF-8. Если встречаются векторы `u8`, которые не являются корректными строками в UTF-8, то функция `std::str::from_utf8()` вернет ошибку, и соответствующий элемент не будет добавлен в `u03`. Если это позволяет требование вашей задачи, то код будет работать правильно.
let u01 = vec![59, 13, 10, 32, 47, 42];
let u01_str = std::str::from_utf8(&u01).expect("invalid utf8");
let mut u02 = Vec::with_capacity(u01.len());
let mut start_index = 0;
for (i, _) in u01_str.char_indices().skip(1) {
    u02.push(&u01_str[start_index..i]);
    start_index = i;
}
u02.push(&u01_str[start_index..]);
println!("u02 = {:?}", u02);
Похожие вопросы