c++ - C ++中的递归问题
问题描述
为什么计数不正确?我很困惑为什么要打印带有 0 的字符串?我只想计算大写字母的数量并输出它们。
#include <iostream>
void uppercase(const char *str){
//std::vector<char> strVector;
int counter = 0;
if(str[0]){
if(isupper(str[0])) counter++;
uppercase(str+1);
}
std::cout<<counter;
}
int main(){
uppercase("United States of America");
}
输出:
0000000100000000010000001
解决方案
您的函数中的主要问题是您正在打印 a 是否char
为大写。相反,您应该让函数返回一个int
,并使用下一个子字符串递归调用该函数:
int uppercase(const char *str) {
if(str[0]) { // while not reached the end of the string
return !! isupper(str[0]) // add 1 if uppercase
+ uppercase(str+1); // recursively call with suffix of string
}
return 0; // base case
}
现在您可以简单地打印返回的结果:
int main(){
std::cout << uppercase("United States of America");
}
这是一个演示。
请注意,这!!
只是一个较短的语法,它将结果 if 转换isupper
为 abool
然后再转换回 a int
。这相当于isupper(str[0]) ? 1 : 0
。
推荐阅读
- wso2 - WSO2-IS 5.11.0 - 不允许系统应用程序更新
- javascript - 在 Javascript 中的新选项卡中自动填充字段
- javascript - Polymer: dom-repeat 将 CSS 过渡应用于项目数组未移位时的新项目
- python - 如何在python中计算加权平均值和中位数?
- c# - 使用反射修改集合项?
- geometry - 从初始四元数中找到旋转四元数
- next.js - 如何从 _app.js 中排除默认组件,使其无法在 slug 中呈现
- c# - WPF 自定义控件引发 GUI 处理的事件
- pandas - 如何根据时间合并两个数据框?
- python - 使用 BeautifulSoup findall() 分割文本