检查循环内部的字节不起作用

时间:2017-10-25 09:33:00

标签: rust

我正在构建一个应该将单词转换为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块的操作。我的错误是什么?

1 个答案:

答案 0 :(得分:1)

一旦找到匹配的元音,你需要打破...否则,除非字符串的第一个字母碰巧是你集合中的最后一个元音,一旦你匹配它,你就

  • 继续比较字符串的第一个字母与其他元音,
  • 发现它不匹配,因为很明显一封信不能同时是两个或多个元音,因此
  • 总结 - 可能多次,最后 - 字符串的第一个字母是辅音。

无论如何,这应该是一个单独的功能,而不是main(),只有return才能找到匹配项,因此您不会需要result变量或{{ 1}}。