Как сравнить 2 разных строковых литерала побайтно в RUST - PullRequest
0 голосов
/ 22 октября 2019

Я ввел два строковых литерала и преобразовал их в массивы байтов, и теперь я пытаюсь сравнить оба байта массивов, чтобы проверить совпадение. Если они совпадают успешно, я хочу сохранить его в массиве неизвестного размера find, но он не сохраняется:

fn main() {
    let mut m: u8 = 0;
    // enter the first_name
    let alpha = "fawad";
    //covert name1 into array bytes
    let name1 = alpha.as_bytes();
    // enter the second_name
    let input = String::new();
    //covert name2 into array bytes
    let name2 = input.as_bytes();
    //want to create an unknown size of an array
    let find: Box<[u8]>;
    for (i, &place1) in name1.iter().enumerate() {
        let place1 = name1[i];
        for (j, &place2) in name2.iter().enumerate() {
            let place2 = name2[j];
            if place1 == place2 {
                let find = place2;
                m = m + 1;
            } else {
                break;
            }
        }
    }
    println!("comparison shows {:?}", find);
}

Я получаю:

error: expected one of `:`, `;`, `=`, or `@`, found `[`
  --> src\main.rs:17:13

   |
17 |     let find[] : Box<[u8]>;
   |             ^ expected one of `:`, `;`, `=`, or `@` here

1 Ответ

1 голос
/ 23 октября 2019

Сообщение компилятора не воспроизводимо, но ваш код обнаруживает некоторые недоразумения. Вот некоторые подсказки, как вы могли бы изменить его:

Вам нужен массив неизвестного размера (и он, вероятно, должен содержать байты, которые уже совпадают, поэтому он должен быть изменяемым):

  • replacelet find : Box<[u8]>; на let mut find = Vec::new();

Вы хотите перебрать байты имени1 и имени2

  • заменить for (i, &place1) in name1.iter().enumerate() на for &place1 in name1.iter()
  • заменитьfor (i, &place2) in name2.iter().enumerate() от for &place2 in name2.iter()

let variable = ... затеняет все прежние определения variable. Вы не хотите скрывать переменные place1, place2, которые хотите использовать эти переменные.

  • удалить let place1 = name1[i];
  • удалить let place2 = name2[j];

Вы хотите добавить соответствующий байт в массив find. Ваш код снова будет скрывать определение find. Так

  • заменить let find = place2; на find.push(place2);
...