【发布时间】:2019-04-01 05:52:56
【问题描述】:
我需要编写一个函数来检查两个Strings 是否在一个字符上按顺序不同,即只有diff("aba", "abc") == true、diff("aab", "cab") == false,字符串的长度相等)。
我以命令式风格编写代码,但它看起来很难看,我想用迭代器以函数式风格编写它。
我想它应该是带有s1.chars()..enumerate() + 一些闭包的东西,可以检测两个字符串中的一个不同字符。
fn has_one_difference(s1: &String, s2: &String) -> bool {
let mut diff_chars_limit = false;
let mut s1_chars = s1.chars();
let mut s2_chars = s2.chars();
for index in 0..s1.len() {
if s1_chars.nth(index).unwrap() != s2_chars.nth(index).unwrap() {
if diff_chars_limit {
return false
} else {
diff_chars_limit = true
}
}
}
return diff_chars_limit;
}
我得到这个错误:
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:345:21
在字符串迭代的最后一个字符上。
【问题讨论】:
-
在我看来你忘了从字符串的长度中减去 1:(s1.len() - 1)Playground
-
我不明白为什么你的一个例子是错误的。它们都在一个字符上不同,并且都一样长。你能再解释一下吗?
-
@AkinerAlkan 0..x 包含 0 和排除 x,问题是
s1_chars.nthmut 迭代器