C语言中递归函数的返回

9avjhtql  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(183)

我对这个问题的结果有一个问题,显然它只返回第一个用例,我哪里出错了?

问题:

创建一个递归函数,该函数以字符串及其长度作为输入。该函数应返回字符'x'在字符串中出现的次数。

禁止

输入中的第一行包含测试用例的数量n。接下来,出现n行,每行包含一个最大长度为5000个字符的字符串。

退出

输出由n行组成,每行包含一个整数,表示字母'x'在输入中出现的次数。所有字符串都以小写形式书写。

示例

禁止:

3
open cadabra
chess taxi bacaxi rate box pulls sandpaper
syrup xxx

预期回报:

0
7
4

我的代码

#include <stdio.h>
#define MAX 5000

int ocorrencias(char palavra[], char letra, int i) {
    if (palavra[i] == '\0') return 0;
    return (letra == palavra[i]) + ocorrencias(palavra, letra, i + 1);
}

int main() {
    char palavra[MAX];
    char letra = 'x';
    int i,j,n;
    int re[MAX];

    scanf("%d",&n);

    for(i=0;i<n;i++){
        scanf("%s", palavra);
    }
    for(j=0;j<n;j++){
        re[j] = ocorrencias(palavra, letra, 0);
    }

    printf("%d \n",re[j]);
}
vh0rcniy

vh0rcniy1#

  1. ocorrencias()可以工作,但不能满足您的要求,即它必须接受字符串的长度。
  2. scanf("%d", ...)将保留尾部换行符,因此在格式字符串后附加一个空格以刷新它。
    1.最好使用fgets()来读取一个带有空格的字符串,这里没有关系,但是fgets()会返回一个带有换行符的字符串。
  3. re应保存n结果(每个字符串1个),而不是MAX。
#include <stdio.h>
#define MAX 5000

int ocorrencias(const char *palavra, size_t len) {
    return len ?
        ('x' == *palavra) + ocorrencias(palavra + 1, len - 1) :
        0;
}

int main() {
    int n;
    if(scanf("%d ", &n) != 1) {
        printf("scanf failed\n");
        return 1;
    }

    char palavra[MAX];
    int re[n];
    for(int i=0; i<n; i++){
        fgets(palavra, MAX, stdin);
        re[i] = ocorrencias(palavra, strlen(palavra));
    }
    for(int i=0; i<n; i++){
        printf("%d\n", re[i]);
    }
}

下面是一个运行示例:

3
open cadabra
chess taxi bacaxi rate box pulls sandpaper
syrup xxx
0
3
3

相关问题