使用二维数组计算每个字符串中的元音
Count vowels in each of the strings using two dimensional array
我需要编写一个程序,让用户输入字符串的数量,然后程序计算每个字符串中的元音字母数量并打印出元音字母的总数。
以下代码在 没有 二维数组
的情况下有效
int countVoweles(char inputArray[])
{
int total = 0;
char vowels[] = "aAeEiIoOuU";
for (int i = 0; inputArray[i]; i++)
{
for (int j = 0; vowels[j]; j++)
{
if (inputArray[i] == vowels[j])
{
total++;
}
}
}
return total;
}
但是,下面的代码对和二维数组不起作用。它仅从第一个字符串打印元音。
如何从输入的所有字符串中打印出元音字母?
char name[3][10];
int total = 0;
char vowels[] = "aAeEiIoOuU";
printf("Enter your string :");
for (int i = 0; i < 3; i++)
{
gets(name[i]);
}
printf("The total number of vowels are :\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; name[i][j]; j++)
{
if (name[i][j] == vowels[i])
{
total++;
}
}
}
printf("%d", total);
初学者注意函数gets
是不安全的,不被C标准支持。而是使用标准函数 fgets
例如
fgets( name[i], sizeof( name[i] ), stdin );
至于你的问题,那么你需要一个循环来遍历数组 vowels
对于数组 name
.
的字符串中的给定字符
例如
for (int i = 0; i < 3; i++)
{
for (int j = 0; name[i][j]; j++)
{
int k = 0;
while ( vowels[k] && name[i][j] != vowels[k] ) ++k;
if ( vowels[k] )
{
total++;
}
}
}
另一种方法是使用您已经编写好的函数,例如
for (int i = 0; i < 3; i++)
{
total += countVoweles( name[i] );
}
您可以使用在 header <string.h>
中声明的标准 C 函数 strchr
而不是使用循环来遍历数组 vowels
,例如
for (int i = 0; i < 3; i++)
{
for (int j = 0; name[i][j]; j++)
{
total += strchr( vowels, name[i][j] ) != NULL;
}
}
您的函数需要知道二维字符数组的大小。
size_t countVoweles(size_t lines, size_t chars, char inputArray[lines][chars])
{
size_t total = 0;
const char vowels[] = "aAeEiIoOuU";
for (size_t i = 0; i < lines; i++)
{
for (size_t j = 0; inputArray[i][j]; j++)
{
total += !!strchr(vowels, inputArray[i][j]);
}
}
return total;
}
int main(void)
{
char x[][256] = {
"<Compilation failed>",
"# For more information see the output window",
"# To open the output window, click or drag the \"Output\" icon at the bottom of this window",
};
printf("%zu\n", countVoweles(sizeof(x)/ sizeof(x[0]), sizeof(x[0]), x));
}
我需要编写一个程序,让用户输入字符串的数量,然后程序计算每个字符串中的元音字母数量并打印出元音字母的总数。 以下代码在 没有 二维数组
的情况下有效int countVoweles(char inputArray[])
{
int total = 0;
char vowels[] = "aAeEiIoOuU";
for (int i = 0; inputArray[i]; i++)
{
for (int j = 0; vowels[j]; j++)
{
if (inputArray[i] == vowels[j])
{
total++;
}
}
}
return total;
}
但是,下面的代码对和二维数组不起作用。它仅从第一个字符串打印元音。
如何从输入的所有字符串中打印出元音字母?
char name[3][10];
int total = 0;
char vowels[] = "aAeEiIoOuU";
printf("Enter your string :");
for (int i = 0; i < 3; i++)
{
gets(name[i]);
}
printf("The total number of vowels are :\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; name[i][j]; j++)
{
if (name[i][j] == vowels[i])
{
total++;
}
}
}
printf("%d", total);
初学者注意函数gets
是不安全的,不被C标准支持。而是使用标准函数 fgets
例如
fgets( name[i], sizeof( name[i] ), stdin );
至于你的问题,那么你需要一个循环来遍历数组 vowels
对于数组 name
.
例如
for (int i = 0; i < 3; i++)
{
for (int j = 0; name[i][j]; j++)
{
int k = 0;
while ( vowels[k] && name[i][j] != vowels[k] ) ++k;
if ( vowels[k] )
{
total++;
}
}
}
另一种方法是使用您已经编写好的函数,例如
for (int i = 0; i < 3; i++)
{
total += countVoweles( name[i] );
}
您可以使用在 header <string.h>
中声明的标准 C 函数 strchr
而不是使用循环来遍历数组 vowels
,例如
for (int i = 0; i < 3; i++)
{
for (int j = 0; name[i][j]; j++)
{
total += strchr( vowels, name[i][j] ) != NULL;
}
}
您的函数需要知道二维字符数组的大小。
size_t countVoweles(size_t lines, size_t chars, char inputArray[lines][chars])
{
size_t total = 0;
const char vowels[] = "aAeEiIoOuU";
for (size_t i = 0; i < lines; i++)
{
for (size_t j = 0; inputArray[i][j]; j++)
{
total += !!strchr(vowels, inputArray[i][j]);
}
}
return total;
}
int main(void)
{
char x[][256] = {
"<Compilation failed>",
"# For more information see the output window",
"# To open the output window, click or drag the \"Output\" icon at the bottom of this window",
};
printf("%zu\n", countVoweles(sizeof(x)/ sizeof(x[0]), sizeof(x[0]), x));
}