我有一个问题。
我想制作一个用一个句子计算元音数量的程序。
为此,我使用strlen计算一个句子中的字母数 但问题是,为什么它只计算第一个单词。
我需要一个句子中的字符数来循环程序以找到句子中每个单词中的元音。
如何计算一个句子中的所有字符?
我应该使用哪个命令?
我正在使用C语言
#include <stdio.h>
#include <string.h>
int main()
{
int input;
int repeater;
scanf("%d",&input);
int counter[input];
getchar();
char kalimat[100000];
scanf("%s",kalimat);
for(int i=1;i<=input;i++)
{
counter[i]=0;
}
repeater=strlen(kalimat);
for(int i=1;i<=input;i++)
{
for(int j=i;j<=repeater;j++)
{
if(kalimat[j]=='A'||kalimat[j]=='a'||kalimat[j]=='E'||kalimat[j]=='e'||kalimat[j]=='I'||kalimat[j]=='i'||kalimat[j]=='O'||kalimat[j]=='o'||kalimat[j]=='U'||kalimat[j]=='u')
{
counter[i]++;
}
}
}
答案 0 :(得分:5)
scanf
只是抢到第一个空间。您需要将模式传递给接受空格的scanf
。尝试将"%s"
替换为"%[^\n]"
。
答案 1 :(得分:0)
如果您使用“%s”作为初始者,则scanf仅计入第一个间隔符。
char kalimat [100000];是丑陋,丑陋的编码,仍然不安全溢出。只需限制你可以输入的字符大约200个。
字符串索引从0开始,所以你的i计数器也应该。
答案 2 :(得分:0)
%s
转换说明符告诉scanf
读取下一个空格字符;它不会被用空格分隔的多个单词读取。
更安全的方法是
if ( !fgets( kalimat, sizeof kalimat, stdin ) )
{
// error on input, handle as appropriate
}
else
{
// process kalimat
}
请注意,fgets
会将结尾换行符存储到kalimat
(如果有空间)。 10千字节对于自动阵列来说有点大。
答案 3 :(得分:0)
请尝试这个,根据需要扩展到其他字母,'Y'也许。
#include <string.h>
int main( )
{
int i = 0;
int counter = 0;
char c;
char kalimat[100000];
printf("\n please enter text\n");
fgets( kalimat, 100000, stdin );
for ( i = 0; i < strlen( kalimat ); i++ )
{
c = toupper( kalimat[i] );
if ( c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' )
counter++;
}
printf( "\n I counted %d vowels ", counter );
getchar( );
}