我对这个问题的结果有一个问题,显然它只返回第一个用例,我哪里出错了?
问题:
创建一个递归函数,该函数以字符串及其长度作为输入。该函数应返回字符'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]);
}
1条答案
按热度按时间vh0rcniy1#
ocorrencias()
可以工作,但不能满足您的要求,即它必须接受字符串的长度。scanf("%d", ...)
将保留尾部换行符,因此在格式字符串后附加一个空格以刷新它。1.最好使用
fgets()
来读取一个带有空格的字符串,这里没有关系,但是fgets()
会返回一个带有换行符的字符串。re
应保存n
结果(每个字符串1个),而不是MAX。下面是一个运行示例: