我對該函式的回傳有疑問,它應該回傳帶有型別化序列的向量,但它回傳的是有序序列,你能告訴我我哪里出錯了嗎?
創建一個遞回函式,將字串及其長度作為輸入。此函式應回傳子字串“hi”在字串中出現的次數。
禁止
輸入中的第一行包含 n 個測驗用例。接下來,出現 n 行,每行包含一個最大長度等于 5000 個字符的字串
出口
輸出由 n 行組成,每行包含一個整數,表示字串“hi”在輸入字串中出現的次數。所有字串均以小寫字母書寫。
例子
禁止
4
hipotenuse hipothermia hilux hifi
hi
hihihi
xavante hey
出口
4
1
3
0
我的代碼:
#include <stdio.h>
#include <string.h>
#define MAX 5000
int ocorrencias(const char *palavra, size_t len) {
char *st = "hi";
return len ?
(*st == *palavra) ocorrencias(palavra 1, len - 1) :
0;
}
int main() {
int n,i;
scanf("%d",&n);
char palavra[MAX];
int re[n];
for(i=0; i<=n; i ){
fgets(palavra, MAX, stdin);
re[i] = ocorrencias(palavra, strlen(palavra));
}
for(i=0; i<=n; i ){
printf("%d\n", re[i]);
}
}
uj5u.com熱心網友回復:
對于初學者來說,這樣的 for 回圈
for(i=0; i<=n; i ){
^^^^^
錯了。
你需要寫
for(i=0; i < n; i ){
^^^^^^
該函式ocorrencias應該宣告為
size_t ocorrencias( const char *palavra );
或者喜歡
size_t ocorrencias( const char *palavra, const char *st );
代替
int ocorrencias(const char *palavra, size_t len) ;
因為它處理字串并且該函式能夠確定傳遞的字串的長度。
例如可以通過以下方式定義
size_t ocorrencias( const char *palavra )
{
const char *st = "hi";
const char *p = strstr( palavra, st );
return p == NULL ? 0 : 1 ocorrencias( p strlen( st ) );
}
所以主要你應該寫
size_t re[n];
//...
for ( i = 0; i < n; i )
{
printf( "%zu\n", re[i] );
}
否則,如果你想計算子字串"hi"或者"hy"(根據你對問題的評論)那么函式可以看起來像下面這樣
size_t ocorrencias( const char *palavra )
{
const char *p = strchr( palavra, 'h' );
return p == NULL ? 0 : ( p[1] == 'i' || p[1] == 'y' ) ocorrencias( p 1 );
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/533952.html
下一篇:字串運算式的計算器。電源操作問題
