我正在构建一个应该将单词转换为Pig Latin的翻译器(即单词 apple 到 apple-hay 或单词 happy 到 appy-fay )。如果单词以元音开头,则不会删除它并将"-hay"
添加到其结尾,如果它是辅音则删除第一个字母并将"-fay"
添加到结尾:
use std::str;
fn main() {
// The case when it works perfectly well
let dict = String::from("Hello").into_bytes();
let vowels: Vec<u8> = vec![b'a', b'e', b'i', b'o', b'u'];
let mut result = String::new();
for c in vowels.iter() {
if &dict[0] == c {
result = str::from_utf8(&dict).unwrap().to_owned() + "-hay ";
} else {
result = str::from_utf8(&dict[1..]).unwrap().to_owned() + "-fay";
}
}
println!("{}", result);
}
代码编译没有任何错误或警告,如果我传递一个以辅音开头的字符串,它的效果非常好。但是,当我传递一个以元音开头的字符串时,例如 apple ,该函数的行为就像它从辅音开始一样,仍然执行来自else
块的操作。我的错误是什么?
答案 0 :(得分:1)
一旦找到匹配的元音,你需要打破...否则,除非字符串的第一个字母碰巧是你集合中的最后一个元音,一旦你匹配它,你就
无论如何,这应该是一个单独的功能,而不是main()
,只有return
才能找到匹配项,因此您不会需要result
变量或{{ 1}}。