阅读单词的数量以元音,辅音

时间:2016-10-19 12:01:44

标签: c++

所以这是练习,它应该读取以元音,辅音开头的单词的数量,以及不适合这两个类别的单词。到目前为止,我的代码是:

#include <iostream>

int main()
{
   using namespace std;
   char a;

   cout << "Enter words (q to quit)\n";
   cin.get(a);

   int others = 0;
   int vowels =0;
   int consonant =0;

   while (a != 'q')
   {
      cin.get(a);
      if(isalpha(a)) {
              switch (a) {
                      case 'a':
                      case 'i':
                      case 'u':
                      case 'e':
                      case 'o':
                          vowels++;
                          break;
                      default:
                          consonant++;
                          break;
              }
      }
      else {
              others++;
      } 

   }


  cout << vowels << " words beginning with vowels\n";
  cout << consonant << " words beginning with consonant\n";
  cout << others << " others";


    return 0;
}

但它没有读到这个词的开头。下面是一个例子:

输入字词(q退出)

十二个可怕的牛来了 安静地穿过15米长的草坪。 q

以元音开头的9个单词

以辅音开头的11个单词

另外7人。

这里的问题在哪里?

编辑:现在完成了。如果有人感兴趣

#include <iostream>
#include <cstring>
#include <cctype>

int main()
{
    using namespace std;
    string a;

    cout << "Enter words (q to quit)\n";

    int others = 0;
    int vowels =0;
    int consonant =0;

    cin >> a;

    while (a != "q")
    {
        cin >> a;
        if(isalpha(a[0])) {
            switch (a[0]) {
                case 'a':
                case 'i':
                case 'u':
                case 'e':
                case 'o':
                    vowels++;
                    break;
                default:
                    consonant++;
                    break;
            }
        }
        else {
            others++;
        }

    }


    cout << vowels << " words beginning with vowels\n";
    cout << consonant << " words beginning with consonant\n";
    cout << others << " others";

    return 0;
}

感谢所有建议

3 个答案:

答案 0 :(得分:1)

cin.get(a)读取单个字符(字母)。要阅读某个字词,您可以operator >>使用std::string

// make a std::string variable to hold a single word
string word;

// later read the word from the standard input
cin >> word;

答案 1 :(得分:1)

你正在逐一阅读字符,直到你点击&#34; q&#34;并分析所有这些。 如果是我,我可能会将所有内容连接成1个字符串,直到&#34; q&#34;然后评估字符串。这可以通过空格分割然后循环结果数组中的所有单词并在每个单词的第一个字符的子字符串上执行切换案例来完成。

答案 2 :(得分:0)

你的任务是一次只读一个单词,只考虑该单词的第一个字母,但你的程序在每次迭代时都在阅读单个字符(使用cin.getc)。

此外,第一个字符在while循环之外被读取,并在检查它是否是&#39; q&#39;之后立即丢弃。

更适合您的作业可能就是这个片段:

#include <iostream>
#include <string>
#include <cctype>

int main()
{
    using std::cout;

    int others = 0,
        vowels = 0,
        consonants = 0;

    std::string word;

    cout << "Enter words (q to quit)\n";

    // read a word at a time till a single 'q'
    while ( std::cin >> word  &&  word != "q" )
    {
        // consider only the first letter of the word
        char c = word[0];
        if ( std::isalpha(c) )
        {
            if ( c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
                 c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' )
            {
                ++vowels;
            }
            else
            {
                ++consonants;
            }
        }
        else
        {
            ++others;
        } 
    }
    cout << vowels << " words beginning with vowels\n";
    cout << consonants << " words beginning with consonant\n";
    cout << others << " others";

    return 0;
}

使用示例输入测试程序:

The 12 awesome oxen ambled quietly across 15 meters of lawn. q

都给:

5 words beginning with vowels
4 words beginning with consonant
2 others