C++递归统计char数组元音函数编译错误修复求助
代码问题排查与修复方案
存在的问题
- 函数声明与定义、调用不匹配:头部声明的
vowels函数第一个参数为char类型,但实际定义时第一个参数为char s[](即char指针),调用时传入的数组名s也是char指针类型,类型不匹配直接触发编译错误。 - 元音判断逻辑错误:现有判断写法
if (s[low] == 'a' || 'A' || ...)不符合C++语法,逻辑或运算符两侧需要独立的判断条件,单独的字符常量等价于布尔值true,会导致整个判断永远为真,所有字符都会被统计为元音。 - 缺少递归终止条件:当前递归没有出口,会无限调用自身,最终触发数组越界、栈溢出错误。
修复方案
- 修改函数声明,保证和定义一致:将
int vowels(char, int, int);改为int vowels(char[], int, int); - 修正元音判断逻辑,每个字符判断都要显式和
s[low]比较 - 添加递归终止条件:当
low >= high时,说明已遍历完所有字符,直接返回0
修复后完整代码
#include <iostream> #include <cstring> using namespace std; // 修正函数声明,第一个参数为char数组 int vowels(char[], int, int); int main() { char s[500]; int high, vowelCount, low = 0; cout << "Enter a string of characters: "; cin.get(s, 500); high = strlen(s); vowelCount = vowels(s, low, high); cout << "The string contains " << vowelCount << " vowels." << endl; return 0; } int vowels(char s[], int low, int high) { // 递归终止条件:遍历完成返回0 if (low >= high) { return 0; } // 修正元音判断逻辑 if (s[low] == 'a' || s[low] == 'A' || s[low] == 'e' || s[low] == 'E' || s[low] == 'i' || s[low] == 'I' || s[low] == 'o' || s[low] == 'O' || s[low] == 'u' || s[low] == 'U') { return 1 + vowels(s, low + 1, high); } else { return vowels(s, low + 1, high); } }
内容的提问来源于stack exchange,提问作者user486543
相关产品推荐
相关产品推荐

