首页 > 解决方案 > 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

标签: c++

解决方案


您的函数中的主要问题是您正在打印 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


推荐阅读