我对计算一个单词中有多少个不同的元音感到困惑?这是我到目前为止...我在变量字[]中逐字保存,然后通过字符检查字符是否是元音...但我不知道如何计算多少不同的元音都在这个词中?请帮忙。提前致谢。
int i,j,words = 0;
while(fgets(row,MAX,f) != NULL)
{
int flag = 0;
int n = 0;
for(i = 0; i < strlen(row); i++)
{
if(isalpha(row[i]))
{
if(!flag)
{
flag = 1;
}
word[n++] = row[i];
}
else if(flag)
{
flag = 0;
word[n] = '\0';
for(j = 0; j < strlen(word);j++)
{
if(isvowel(word[i]))
{
c = word[i];
}
// i stopped here cause i donno how to check whether the char is different from all the others
}
}
}
}
答案 0 :(得分:0)
当你找到每个元音时,简单地设置数组的标志以注意元音被找到。然后计算标志的数量。诀窍是有效地将c
(元音)转换为索引 - 这就是你被困住的地方。
char *strchr(const char *s, int c)
很有用。它在(char) c
指向的字符串中找到s
的第一个匹配项。然后将结果转换为标志数组的索引很容易。
让我们说'A'
与'a'
相同,用于元音计数。
int DifferentVowelCount(const char *s) {
static const char *Vowels = "AaEeIiOoUu";
bool VowelExist[5] = { 0 };
while (*s) {
char *p = strchr(Vowels, *s);
if (p != NULL) {
int index = (int) (p - Vowels); // index is 0 to 9
index /= 2;
VowelExist[index] = 1;
}
s++;
}
int sum = 0;
int i;
for (i = 0; i < 5; i++) {
if (VowelExist[i]) {
sum++;
}
}
return sum;
}
答案 1 :(得分:0)
好吧,似乎手动创建了计算一个单词中不同元音的功能,但这个解决方案确实有效,在这里它是:
int diff_vowels(char *word)
{
char a = 'a',b = 'e', c = 'i', d = 'o', e = 'u';
int a1 = 0,b1 = 0,c1 = 0,d1 = 0,e1 = 0;
while(*word)
{
if(isalpha(*word))
{
if(tolower(*word) == 'a') a1 = 1;
else if(tolower(*word) == 'e') b1 = 1;
else if(tolower(*word) == 'i') c1 = 1;
else if(tolower(*word) == 'o') d1 = 1;
else if(tolower(*word) == 'u') e1 = 1;
}
word++;
}
return a1 + b1 + c1 + d1 + e1;
}