使用递归计算c中单词(字符串)中字母出现的次数

时间:2013-10-11 03:53:02

标签: c string recursion

这个是我在com sci实验室的决赛,我想知道主函数是否正确,我只是添加了另一个函数,因为idk如何在字符串中使用递归来计算这个角色出现的次数。,im我真的很难过。请帮我。 :)

#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");

2 个答案:

答案 0 :(得分:1)

这将有效:

int count_chars(const char* string, char ch) {
  return *string? count_chars(string + 1, ch) + (ch == *string) : 0;
}

答案 1 :(得分:0)

您的递归函数应该像所有递归函数一样工作。你需要:

  1. 基本案例(停止递归)
  2. 缩小的输入集(从原始字母缩小,以便实际到达基本情况)
  3. 你的函数看起来像这样(伪代码)

    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)
    }