返回字符串中的最后一个元音
我需要返回给定字符串中的最后一个元音(大写或小写)并返回“!” 如果字符串中没有元音。
我写的代码有效,但前提是字符串以元音结尾。如果它不以元音结尾,它总是返回一个“!”。
我怎样才能解决这个问题?
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 倍。
不要先将您的字符串转换为一种情况或另一种情况。只是使搜索条件更长,速度要快得多。