如何在RUST中逐字节比较2个不同的String文字

问题描述 投票:-2回答:1

我输入了两个字符串文字,并将它们转换为字节数组,现在我试图比较两个数组字节以检查是否匹配。如果它们成功匹配,我想将其保存到未知大小的数组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
arrays rust slice string-comparison
1个回答
1
投票

编译器消息不可复制,但是您的代码显示出一些误解。这里有一些提示,提示您如何更改它:

您想要一个未知大小的数组(它可能包含已经匹配的字节,因此它必须可变):

  • let find : Box<[u8]>;替换let mut find = Vec::new();

您要迭代name1和name2的字节

  • 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的所有以前的定义。您不想隐藏要使用这些变量的变量place1place2

  • 删除let place1 = name1[i];
  • 删除let place2 = name2[j];

您想将匹配的字节添加到数组find。您的代码将再次掩盖find的定义。所以

  • let find = place2;替换find.push(place2);
© www.soinside.com 2019 - 2024. All rights reserved.