c++ - 如何制作一个递归函数来显示有多少元音有输入
问题描述
我确实设法制作了一个递归函数,但由于某种原因,*char 的大小仅达到 8,然后停止
int vocales(char *cd,int num){
if(num<=sizeof(cd)){
if(cd[num]=='a' || cd[num]=='e' || cd[num]=='i' || cd[num]=='o' || cd[num]=='u'){
return 1 + vocales(cd,num+1);
}else{
return 0 + vocales(cd,num+1);
}
}else{
return 0;
}
}
如果我输入“stackoverflow”,它只会计算到第 8 个字符,所以它说元音的数量是 3
解决方案
sizeof
返回对象的大小。在这种情况下,对象是一个指针,而不是指向的项目。您需要找到一种新方法来确定何时到达字符串的末尾。
幸运的是,C 风格的字符串是空终止的,因此您可以寻找终止符。
int vocales(const char *cd) // no need for num.
// made cd const for a bit of extra versatility
{
char val = *cd; // get pointed-at character just for readability
if (val != '\0') // check for terminator
{
if (val == 'a' || val == 'e' || val == 'i' || val == 'o' || val == 'u')
{
return 1 + vocales(cd + 1); // advance pointer
}
else
{
return 0 + vocales(cd + 1);
}
}
else
{
return 0;
}
}
有改进的余地,例如正确处理大写元音,但编译器应该能够为您处理大部分内容。
推荐阅读
- python - 如何在 Python 3 中访问具有 - 运算符的数据框的属性?
- r - 提取关于 tidygraph 中特定节点的邻域/子图
- bash - bash 中 ${...} 构造(用于字符串和数组)的名称?
- c# - EF Core Code First:通常重命名拥有类型的属性
- c++ - 是否存在对象的存储在其生命周期内可能发生变化的任何情况?
- r - Unicode 字符输出与 print() 的差异
- node.js - 如何使用自动生成的 SSL 密钥正确地向服务器发送 HTTPS 请求?
- c++ - 我对下面 [dcl.enum]/5 (5.3) 中的“否则”一词的解释是否正确?
- excel - 如何根据一系列单元格打开和关闭多个 Excel 工作簿
- excel - 当单元格已包含该列表中的值时,如何从单元格的验证列表中删除项目?