我對這個問題的結果有疑問,顯然它只回傳第一個用例,我哪里出錯了?
問題:
創建一個將字串作為輸入及其長度的遞回函式。此函式應回傳字符“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]);
}
uj5u.com熱心網友回復:
ocorrencias()有效,但不滿足您必須接受字串長度的要求。scanf("%d", ...)將留下尾隨換行符,因此在格式字串中附加一個空格以重繪 它。- 最好用于
fgets()讀取帶有空格的字串。在這里沒關系,但fgets()會回傳一個帶有換行符的字串。 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/532804.html
標籤:C递归
