如何计算C中文本文件中一个单词中有多少个不同的元音?

时间:2014-08-23 13:33:55

标签: count letters

我对计算一个单词中有多少个不同的元音感到困惑?这是我到目前为止...我在变量字[]中逐字保存,然后通过字符检查字符是否是元音...但我不知道如何计算多少不同的元音都在这个词中?请帮忙。提前致谢。

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
            }
        }
    }
}

2 个答案:

答案 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;
}