@TicSo

Как исправить код конвертации vec_u8 to vec_&str?

Как исправить последний блок в коде:
fn main() {
    
 let u01: Vec<u8> = vec![59, 13, 10, 32, 47, 42];
 println!("1. u01_u8 = {:?}", u01);       // [59, 13, 10, 32, 47, 42]
 
 let mut u01_str: &str = "";
 u01_str = std::str::from_utf8(&u01).unwrap();
 println!("2. u01_str = {:?}", &u01_str); // ";\r\n /*"
 
 let mut u02: Vec<String> = vec![];
 
 for c in u01_str.chars() {
    println!("{:?}", c);                  // chars
    u02.push(c.to_string());
 }
 println!("3. u02 = {:?}", &u02);         //  [";", "\r", "\n", " ", "/", "*"]

 /*  блок 
 let mut u03: Vec<&str> = vec![];
 // let mut u03: Vec<[&'static str; 128]> = vec![];

 for c in u01_str.chars() {
    println!("{:?}", c);
    u03.push(c.to_string().as_str());
 }
 
 println!("4. u03 = {:?}", &u03);         // чтобы получить: [";", "\r", "\n", " ", "/", "*"]
 */
}
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
bingo347
@bingo347
Crazy on performance...
Сумбурный вопрос, но если правильно понял, то автор хочет получить Vec<&str> элементы которого ссылаются на исходный вектор байт и в каждом элементе строка из 1 символа:
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 i0 = 0;
for (i, _) in u01_str.char_indices().skip(1) {
    u02.push(&u01_str[i0..i]);
    i0 = i;
}
u02.push(&u01_str[i0..]);
println!("u02 = {:?}", u02);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы