如何解决计算字符串中的元音数量
| 我只是想使用递归来计算字符串中的元音,但这是行不通的。#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);
}
解决方法
您可能并不想遍历
set
。应该:
if(is_vowel(vowels,&set[i]))
您的函数is_element()
是绝对错误的,您可以将其更改为:
int is_element(char vowel,const char *set)
{
return (vowel == set[0]);
}
甚至传递字符而不是指向字符的指针。
, 您的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
应用的整个概念似乎是错误的伙伴。我建议您重写代码。整个代码中存在无数错误。
, 在main
中,您的for循环使用完全相同的参数多次调用is_vowel()
。
您可能需要使用更简单的原型重写函数:
/* int is_vowel(const char *vowels,const char *set); */
int is_vowel(const char *vowels,int ch);
, #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));
}
, 有一个更简单的解决方案来解决您的问题:
#define VOWELS \"aeiouAEIOU\"
size_t vcount(const char *s)
{
size_t i = 0;
while (s && *s) {
if (strchr(VOWELS,*s)) ++i;
++s;
}
return i;
}
它可以轻松地转换为递归版本。
, 您可以在python中使用以下代码来计算元音的数量:
def元音(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 \'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。