我需要返回给定字符串中的最后一个元音(大写或小写)并返回 '!'如果字符串中没有任何元音。
我写的代码有效,但前提是字符串以元音结尾。如果它不以元音结尾,它总是返回一个 '!'。
我该如何解决这个问题?
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
将字符串转换为小写并将搜索缩短为aeiou
,但我尚未测试这是否会影响性能。
编辑:
我刚测试过。对于大 N(100,000 个字符串),使用 std::transform
大约慢 158 倍。
不要先将您的字符串转换为一种或另一种大小写。将搜索条件加长会快得多。
关于c++ - 返回字符串中的最后一个元音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66876806/