计算字符串中元音的数量

时间:2011-05-31 11:01:33

标签: c string recursion

我只是想使用递归计算字符串中的元音,但它不起作用。

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

#define SETSIZ 10

#define TRUE 1
#define FALSE 0
int is_empty(const char *set);
int is_element(char vowel, const char *set);
int is_vowel(const char *vowels, const char *set);

int main(void)
{
    int count = 0,i;
    char vowels[11] = {'A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', '\0'}, set[SETSIZ] = "mustafa";
    for(i=0;i<strlen(set);i++){
        if(is_vowel(vowels, set))
            count +=  1;
        }
    printf("%s has %d vowels",set, count);
    return(0);
}
int is_empty(const char *set)
{
    return(set[0] == '\0');
}
int is_element(char vowel, const char *set)
{
    int ans;
    if(is_empty(set))
        ans = FALSE;
    else if (vowel == set[0])
        ans = TRUE;
    else
        ans = is_element(vowel, &set[1]);
    return(ans);
}
int is_vowel(const char *vowels, const char *set)
{
    int ans, i = 0;

    if(is_empty(vowels))
        ans = FALSE;
    else if(is_element(vowels[0], set))
    {
        printf("**");
        ans = TRUE;
    }
    else
    {
        printf("--");
        ans = is_vowel(&vowels[1], set);
        }

    return(ans);
}

6 个答案:

答案 0 :(得分:3)

您的is_vowel代码存在问题。

int is_vowel(const char *vowels, const char *set)
{
int ans, i = 0;

if(is_empty(vowels))     //You are passing vowels which would never be empty.
    ans = FALSE;         //Replace it with set character pointer. 
//Rest of the code

整个概念,应用似乎是错误的伙伴。我建议你重写代码。整个代码中有无数的错误。

答案 1 :(得分:1)

main中,for循环使用完全相同的参数多次调用is_vowel()

您可能希望使用更简单的原型重写该函数:

/* int is_vowel(const char *vowels, const char *set); */
int is_vowel(const char *vowels, int ch);

答案 2 :(得分:1)

#include <stdio.h>



int vowel(char str[],int k)
{
int count = 0;
while(str[k]!='\0')
{
    if(str[k] == 'a' || str[k] == 'e' || str[k] == 'i' || str[k] == 'o' || str[k] == 'u')
        return 1 + vowel(str,k+1);
    else
        return 0 +vowel(str,k+1);
}
return 0;
}
void main()
{
char x[50];
gets(x);
printf("%d",vowel(x,0));
}

答案 3 :(得分:0)

您的问题有一个更简单的解决方案:

#define VOWELS "aeiouAEIOU"

size_t vcount(const char *s)
{
        size_t i = 0;

        while (s && *s) {
                if (strchr(VOWELS, *s)) ++i;
                ++s;
        }

        return i;
}

它可以很容易地转换为递归版本。

答案 4 :(得分:0)

  1. 您不需要像set那样循环。应该是:

    if(is_vowel(vowels, &set[i]))
    
  2. 您的函数is_element()绝对错误,您可以将其更改为:

    int is_element(char vowel, const char *set)
    {
        return (vowel == set[0]);
    }
    
  3. 甚至传递字符而不是指向字符的指针。

答案 5 :(得分:0)

您可以在python中使用此代码来计算元音的数量:

def vowels(s):

if s == '':
    return 0   # no vowels in the empty string
elif s[0] in 'aeiouAEIOU':
    return 1 + vowels( s[1:] )
else:
    return 0 + vowels( s[1:] )

您还可以使用变量,例如vowel_list ='aeiouAEIOU'