当两个元音一个接一个出现时,计数应该递增。但我不知道为什么它递增的不止于此。
#include<stdio.h>
#include<conio.h>
void main(void)
{
int i,j,count=0;
char string[80];
printf("Enter a string:\n");
gets(string);
for(i=0; ;i++)
{
if(string[i]=='\0')
break;
if(string[i]=='a'||string[i]=='A'||string[i]=='e'||string[i]=='E'||string[i]=='i'||string[i]=='I'||string[i]=='o'||string[i]=='O'||string[i]=='u'||string[i]=='U')
{
if(string[i+1]=='a'||string[i]=='A'||string[i]=='e'||string[i]=='E'||string[i]=='i'||string[i]=='I'||string[i]=='o'||string[i]=='O'||string[i]=='u'||string[i]=='U')
count++;
}
}
printf("%d",count);
getch();
}
最佳答案
看起来你这里有错字,你的代码:
if(string[i]=='a'||string[i]=='A'||string[i]=='e'||string[i]=='E'||string[i]=='i'||string[i]=='I'||string[i]=='o'||string[i]=='O'||string[i]=='u'||string[i]=='U')
{
if(string[i+1]=='a'||string[i]=='A'||string[i]=='e'||string[i]=='E'||string[i]=='i'||string[i]=='I'||string[i]=='o'||string[i]=='O'||string[i]=='u'||string[i]=='U')
count++;
}
注意那里的第二个 if 语句,除了第一个条件之外的所有条件都是检查字符串 [i] 而不是字符串 [i+1]。因此,如果 string[i] 中有“A”,那么无论 string[i+1] 中是什么,这都会增加计数。
你想要:
if(string[i]=='a'||string[i]=='A'||string[i]=='e'||string[i]=='E'||string[i]=='i'||string[i]=='I'||string[i]=='o'||string[i]=='O'||string[i]=='u'||string[i]=='U')
{
if(string[i+1]=='a'||string[i+1]=='A'||string[i+1]=='e'||string[i+1]=='E'||string[i+1]=='i'||string[i+1]=='I'||string[i+1]=='o'||string[i+1]=='O'||string[i+1]=='u'||string[i+1]=='U')
count++;
}
我还建议您查看函数 tolower
,它将小写一个字符,这意味着您需要进行更少的比较,这将使该代码更易于阅读和维护。您也可以考虑在此处使用开关或任何数组,并可能编写一个辅助函数。
我想我只是无法忍受现在的代码,这是一个更好的版本:
int is_vowel(char ch)
{
switch (tolower(ch))
{
case 'a': case 'e': case 'i': case 'o': case 'u':
return 1;
default:
return 0;
}
}
然后制作你的 if 语句:
if (is_vowel(string[i]) && is_vowel(string[i+1]))
count++;
看,更清晰易读,您不觉得吗?
关于c - 查找字符串中两个连续元音的数量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3224555/