gpt4 book ai didi

c++ - 如何使用递归计算字符串中的元音

转载 作者:行者123 更新时间:2023-12-03 12:50:51 25 4
gpt4 key购买 nike

我正在尝试使用递归来计算字符串中元音的数量。这是我到目前为止所拥有的:

int vowels(string str, int pos, int length)
{
if (str.length() == 0)
return 0;

switch (str[pos])
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
return 1 + vowels(str.substr(1), pos, length);
default:
return vowels(str.substr(1), pos, length);
}
}

int main()
{
string str;
int len;

cout << "Enter a string: ";
getline(cin, str);
cout << endl;

len = static_cast<int>(str.length());

cout << "Number of vowels in \"" << str << "\" = "
<< vowels(str, 0, len) << endl;

return 0;
}

问题是,我只需要在第一次调用元音函数时将 pos 设置为 0,而无需在后续递归调用中将其重置为 0。另外,我需要在每次递归调用 Vowels() 之前增加 pos,而不是使用子字符串。另外,基本情况应该是 pos == length(当字符串中没有更多字符需要检查时)。

最佳答案

似乎您忘记了增加 pos:

/* inside the vowels function switch statement */
return 1 + vowels(str.substr(1), pos+1, length);
default:
return vowels(str.substr(1), pos+1, length);

此外,如果将递归结束条件更改为“pos==str.length()”,则根本不需要 str.substr(...) 。另外,如果您确实跳过 substr(...),请通过 const 引用传递 std::string (这是一个好习惯)。

关于c++ - 如何使用递归计算字符串中的元音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23636461/

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