arrays - 如何在 RUST 中逐字节比较 2 个不同的字符串文字
问题描述
我输入了两个字符串文字并将它们转换为字节数组,现在我试图比较两个数组字节以检查匹配。如果它们匹配成功,我想将它保存到一个未知大小的数组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
解决方案
编译器消息不可重现,但您的代码揭示了一些误解。这里有一些提示,你可以如何改变它:
你想要一个未知大小的数组(它可能包含已经匹配的字节,所以它必须是可变的):
- 替换
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);
推荐阅读
- google-fit - Google Fit API 睡眠会话的时区
- firebase - 请参阅 Firebase 测试实验室使用情况
- javascript - 未处理的拒绝(TypeError):寄存器不是函数
- javascript - 该按钮仅通过第二次单击打开表单
- vb.net - 有没有办法获得字体的下拉菜单?
- python - 创建从另一个数据框的列中获取单个值的新列
- python-3.x - 如何设置以颜色图开头的字符串?
- swift - Swift NSSortDescriptor:按字母顺序排序,从“A”以外的其他字母开始
- c++ - Google Kickstart - 如果未使用 cout.clear(),则答案错误
- python - 循环遍历 django 模板中的两个查询集