gpt4 book ai didi

c++ - 遍历字符串和 switch 语句 : C++

转载 作者:太空狗 更新时间:2023-10-29 19:37:22 25 4
gpt4 key购买 nike

我正在写一些代码,遇到了一些麻烦。我想写一个函数来检查一个字符串是否有任何元音,并试图通过一个带有 switch 语句的 for 循环来实现。显然,它不起作用,并且由于某种原因永远不会返回 true。

bool scanStr(string userInp) {
for (int i = 0; i < userInp.size(); i++) {
switch (userInp[i])
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
case 'y':
case 'Y':
return true;
break;
default:
return false;
}
}
}

我只是尝试测试程序是否真的在遍历字符串,确实如此,所以我不明白为什么在函数中,它总是返回 false?

int main() {
string userInp;
string pigLatin;

cout << "Please enter a string to convert to pig Latin: " << endl;
cin >> userInp;
cout << endl;

// tests
for (int i = 0; i < userInp.size(); i++) { //checking if it actually iterates
cout << userInp[i];
}
cout << endl;

if (scanStr(userInp))
cout << "it has a vowel" << endl;
else
cout << "no vowel" << endl;

system("pause");
return 0;
}

起初我认为这是因为即使在最后一个 case 之后有一个 break 语句,循环仍在继续,但我不完全确定是否是这个原因。

有什么想法吗?

最佳答案

我建议您将元音测试的逻辑提取到它自己的函数中:

bool is_vowel(char x)
{
switch (x)
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
case 'y':
case 'Y':
return true;
default:
return false;
}
}

然后您可以使用标准算法而不是循环:

#include <algorithm>
#include <string>

bool contains_vowel(const std::string& str)
{
return std::any_of(str.begin(), str.end(), is_vowel);
}

(我将 scanStr 重命名为 contains_vowel 因为这个名字更具描述性。)

关于c++ - 遍历字符串和 switch 语句 : C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36686680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com