【发布时间】:2015-09-28 00:28:31
【问题描述】:
这个递归函数在计算用户输入的字符串中的元音时遇到了分段错误(核心转储)。我的目标是将用户输入的字符串变量复制到字符数组中,然后小写并验证该字符是否为元音。验证后,该函数应执行元音计数的递归加法。我在此函数中将整数 0 作为参数 int L 传递。任何关于我可以做些什么来修复和改进这部分代码的信息都会很棒。
#include <iostream>
#include <cstring>
#include <string>
#include <cctype>
using namespace std;
int vowels(string s, int L)
{
int sum = 0;
char str[s.length()-1];
strcpy(str,s.c_str());
if(str[L])
{
tolower(str[L]);
if(str[L]!='a'||str[L]!='e'||str[L]!='i'||str[L]!='o'||str[L]!='u')
sum = 0;
else
sum = 1;
return sum += vowels(s,L++);
}
else
return 0;
}
【问题讨论】:
-
strcpy 复制一个字符串,直到达到 nul char。所以你需要一个 s.length()+1 元素的 char 数组,如果没有发生分段错误。请做一些调试。
-
另外
tolower不会修改它的参数,所以调用tolower(str[L])是一个空操作。
标签: c++ arrays string char segmentation-fault