我正在为此递归函数获取分段错误(核心转储),以计算用户输入的字符串中的元音。我的目标是将用户输入的字符串变量复制到字符数组然后小写,并验证该字符是否是元音。验证后,该函数应执行元音计数的递归加法。我在此函数中传递一个0的整数作为参数int L.关于我可以做些什么来修复和改进这部分代码的任何信息都会很棒。
-i
答案 0 :(得分:0)
您的代码存在一些问题:
[]
运算符。为什么会出现分段错误?
strcpy
复制字符串,直到达到null-char。因此,如果不发生分段错误,则需要s.length()+1
元素而不是s.length()-1
的char数组。
注意到这些点,这里是修改后的代码:
int vowels(string::const_iterator beg, string::const_iterator end) {
int sum = 0;
if (beg != end) {
switch (*beg) {
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
return 1 + vowels(++beg, end);
}
return vowels(++beg, end);
}
return 0;
}
工作代码:
#include <string>
#include <iostream>
using namespace std;
int vowels(string::const_iterator beg, string::const_iterator end) {
int sum = 0;
if (beg != end) {
switch (*beg) {
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
return 1 + vowels(++beg, end);
}
return vowels(++beg, end);
}
return 0;
}
int main() {
string x = "hello canberk";
cout << vowels(x.begin(), x.end()) << endl;
return 0;
}