我输入了两个字符串文字,并将它们转换为字节数组,现在我试图比较两个数组字节以检查是否匹配。如果它们成功匹配,我想将其保存到未知大小的数组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
答案 0 :(得分: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
的所有以前的定义。您不想隐藏要使用这些变量的变量place1
,place2
。
let place1 = name1[i];
let place2 = name2[j];
您要将匹配的字节添加到数组find
中。您的代码将再次掩盖find的定义。所以
let find = place2;
替换为find.push(place2);