0

これは私のcom sci labでの私の決勝戦であり、メイン関数が正しいかどうか疑問に思っていました.idkが文字列で再帰を使用してこの文字が何回発生するかを数えるため、他の関数を追加しました.これには苦労しました。私を助けてください。:)

#include<stdio.h>
#include<string.h>

int count_chars(const char* string, char ch);


int main()
{
    char string[BUFSIZ];
    char ch[2];
    int count;

    printf ("Please enter a line of text, max %d characters\n", sizeof(string));

    if (fgets(string, sizeof(string), stdin) != NULL)
        printf ("You entered: %s\n", string);

    printf("Input the letter you want to be counted: ");
    gets(ch);

    count=count_chars(const char* string, char ch);
    printf("The number of times the letter occurs in the word above is: %d", count);

    return 0;
}


int count_chars(const char* string, char ch)
{
    int count = 0;

    for(; *string; count += (*string++ == ch)) ;
    return count;
}

例えば; 入力は: "aabbabc" の場合、検索する必要がある文字は b であるため、プログラムは次のように実行する必要があります:(これはヒントとして私に与えられたものです)。私はそれを試してみましたが、動作しません。

"b"  "aabbabc"
if 'b'==st[0]
1+cnt('b', "abbabc");
else 
cnt('b' , "abbabc");
4

2 に答える 2

1

これはうまくいきます:

int count_chars(const char* string, char ch) {
  return *string? count_chars(string + 1, ch) + (ch == *string) : 0;
}
于 2013-10-11T04:00:20.310 に答える
0

再帰関数は、すべての再帰関数と同じように機能する必要があります。必要なもの:

  1. 基本ケース (再帰を停止するため)
  2. 削減された入力セット (基本ケースに実際に到達するように、元から削減されたもの)

関数は次のようになります(疑似コードで)

function count_chars(string s, char ch){
   int count = 0 

   if (s is empty) {
        return 0
    }

    char head = extract first char of s
    string remainder = get rest of s without the head
    if (head == ch) {
        count = 1
    }
    return count + count_chars(remainder, ch)
}
于 2013-10-11T04:02:35.773 に答える