返回字符串中的最后一个元音

我需要返回给定字符串中的最后一个元音(大写或小写)并返回“!” 如果字符串中没有元音。

我写的代码有效,但前提是字符串以元音结尾。如果它不以元音结尾,它总是返回一个“!”。

我怎样才能解决这个问题?

char lastVowel(string s){

    char vowel = ' ';

    for(int i = 0; i < s.size(); ++i){
        if(s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U' ||
           s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
            vowel = s[i];
        }else{
            vowel = '!';
        }
    }
    return vowel;
}

回答

这真的很简单,可以用两行来完成:

#include <string>

char lastVowel(std::string s) {
    const auto pos = s.find_last_of("aeiouAEIOU");
    return pos == std::string::npos ? '!' : s[pos];
}

您也可以std::transform将字符串转换为小写并将搜索缩短为 just aeiou,但我还没有测试这是否会影响性能。

编辑:

我刚刚测试了它。对于大 N(100,000 个字符串),使用std::transform速度大约慢 158 倍。

不要先将您的字符串转换为一种情况或另一种情况。只是使搜索条件更长,速度要快得多。


以上是返回字符串中的最后一个元音的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>