用最少的元音打印单词

时间:2018-07-27 20:15:46

标签: c++ algorithm counting

我正在尝试解决一个问题,其中基于最小数目的元音的k个数字将打印至少包含k个元音的所有单词。 因此,例如具有:

Input: with k=2
  cars are...really nice

Output: 
 are
 really
 nice

我认为我已经很接近了,但是我在保存单词和检查元音数量方面遇到了一些问题。 这是代码:

int is_letter(char c) {
  if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
    return 1;
  return 0;
}


int main(){


    ifstream fin("dateTest.in");
    char s[250];
    char word[250];
    int k;
    fin>>k;
    int nrVowels=0;

    while(fin>>s){
         int n = strlen(s);
         int have_word = 0;

          for (int i = 0; i < n; ++i){
            if (is_letter(s[i])){
              have_word = 1;
              word[i]+=s[i]; //Here i'm having some problems

            }else if (have_word == 1) {
              for(int i=0; i<strlen(word); i++){
                 if (word[i] == 'a' ||  word[i] == 'e' ||  word[i] == 'o' ||  word[i] == 'i' || word[i] == 'u'){
                        nrVowels++;

                        if(nrVowels >= k){
                            cout<<word;
                        }
              }
            }
             have_word = 0;
             //Here i should somehow reset the word variable?
        }
      }
    }
}

首先,我创建了一个检查字符是否为字母的函数。 之后,我会花一会儿遍历文件中的所有单词,然后验证每个单词,如果是一个单词,则应将该单词保存在另一个我做错了的变量中:(如果找不到另一个单词表示该单词已结束,并且应该检查元音,如果至少有k个元音,则应打印该单词。 我的问题是我保存单词无效的方式,最后我应该以某种方式重置单词变量,以便将另一个单词保存在那里。

1 个答案:

答案 0 :(得分:2)

我会将单词存储在map中,其中字符串是元音的数量作为数据。

然后,很容易遍历地图,打印出所有数据值小于或等于k的单词。


第一部分可以通过逐字读取来完成(只需使用常规格式的输入运算符>>读入string),然后计算该字的元音。然后将字串计数对插入地图。