C 如何打印辅音多于元音的字符串?
输入20个字符串的数组。制作一个程序,打印出辅音多于元音的字符串,其中字母“r”至少重复3次 我相信问题出在我的if循环中,但不知何故我无法理解为什么它不能正常工作。它打印我输入的每个字符串 这是我写的代码:C 如何打印辅音多于元音的字符串?,c,arrays,string,for-loop,char,C,Arrays,String,For Loop,Char,输入20个字符串的数组。制作一个程序,打印出辅音多于元音的字符串,其中字母“r”至少重复3次 我相信问题出在我的if循环中,但不知何故我无法理解为什么它不能正常工作。它打印我输入的每个字符串 这是我写的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char string[20][50]; int i, j;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char string[20][50];
int i, j;
int vowels=0;
int consonants=0;
int repeated_r=0;
printf("Enter the array of 20 strings:\n");
for(i=0;i<20;i++){
gets(string[i]);
}
for(i=0;i<20;i++){
for(j=0;j<50;j++){
if(string[i][j] == 'r'){
repeated_r++;
}
else if(string[i][j] == 'a' || string[i][j] == 'e' || string[i][j] == 'i' || string[i][j] == 'o' || string[i][j] == 'u'){
vowels++;
}
else{
consonants++;
}
}
if(consonants>vowels && repeated_r>=3){
fflush(stdin);
puts(string[i]);
}
}
return 0;
}
#包括
#包括
#包括
内部主(空){
字符串[20][50];
int i,j;
int元音=0;
int辅音=0;
int重复r=0;
printf(“输入20个字符串的数组:\n”);
对于(i=0;i您需要在处理每个字符串后重置计数器
不要使用get
而是使用fgets
for(i=0;i<20;i++){
for(j=0;j<50;j++){
if(string[i][j] == 'r'){
repeated_r++;
}
else if(string[i][j] == 'a' || string[i][j] == 'e' || string[i][j] == 'i' || string[i][j] == 'o' || string[i][j] == 'u'){
vowels++;
}
else{
consonants++;
}
}
if(consonants>vowels && repeated_r>3){
fflush(stdin);
puts(string[i]);
}
//Reset the counters
consonants =0;
vowels =0;
repeated_r =0;
}
}
(i=0;i3)的{
fflush(stdin);
puts(字符串[i]);
}
//重置计数器
辅音=0;
元音=0;
重复r=0;
}
}
还请注意,在当前代码中,r
不被视为辅音。您没有重置外部循环中变量的初始值
int vowels=0;
int consonants=0;
int repeated_r=0;
还有内部循环中的条件
for(j=0;j<50;j++){
^^^^
具有未定义的行为
我可以建议以下解决方案,如下面的演示程序所示
#include <stdio.h>
#include <string.h>
int main( void )
{
enum { M = 3, N = 50 };
char s[M][N];
for ( size_t i = 0; i < M; i++ )
{
fgets( s[i], N, stdin );
s[i][strcspn( s[i], "\n" )] = '\0';
}
const char *vowels = "aeiou";
const char r = 'r';
for ( size_t i = 0; i < M; i++ )
{
size_t repeated_r = 0;
size_t vowels_count = 0;
size_t n = strlen( s[i] );
for ( size_t j = 0; j < n; j++ )
{
repeated_r += s[i][j] == r;
vowels_count += strchr( vowels, s[i][j] ) != NULL;
}
if ( repeated_r >= 3 && vowels_count < n - vowels_count )
{
puts( s[i] );
}
}
return 0;
}
然后程序输出可能如下所示
errors
您的代码中还有一个问题,ypu正在使用gets。它还将包含空格,因此如果您的字符串为“\uu\rrrbaeeeiou”。它将打印此字符串,但实际上不应打印此字符串。
请注意,“”表示空白。
根据你的代码,“Y”将被计算在辅音中,即使在你的字符串中有4个辅音(3 R和1 B)和8个元音,它将打印这个字符串作为输出,因为空白空间将被计算为辅音。
此外,在您的代码中,r不算作辅音r
是辅音,因此如果您有单词Totalteer
,则不会打印它,因为您将计算3个r
,4个元音和2个辅音
Hello World
errors
photosynthesis_bro
errors