元音计数中的输出量不正确

Incorrect amount of output in vowel-counting

我正在尝试编写一个代码来读取输入行中有多少个元音字母。使用 C++,第一个输入是行数。在这个练习中,"y" 被算作元音。

 #include <iostream>
#include <string.h>
using namespace std;
int main(){     
    int vowel=0;
    int a;
    cin >>a; 
    for (int b=0; b<a; b++){
    string x; 
 getline(cin,x);
 int i = x.length();
        if(x[i]=='a'||x[i]=='e'||x[i]=='i'||x[i]=='o'||x[i]=='u'|| x[i]=='y')
        vowel ++;
   cout<<vowel<<" "; }
}

我总是计算错误的元音数量。为什么会这样? 示例输入:

16
tiraf sliamnmkjvcms c cmj gyipdxsuxepqqsrc
dsxyukxpsgxftsrov g  hsgekuxbf mefr tpvnutzw rxky
fg esxptwwydkfnblkwhezcewvwv u rjavbzlivjc znv 
ge lewqu  x qyxy thygluvtdtjyupmbcegyvjzk  
 e  ztaggibb iq ygy pd vycvpquwdbde yy mct q
kdewjl  gjapfpg  qpwvvuokndgjadadjw ok  a ifdjsw htufxiv hbu
musoamuk kl  viipodev k lg z jhymb m dia nthkzl a
fvdtqtbett do lcsgmv  kbvo hbbd injtjrzfm n  ywmljjxwz sah
cplw y npe orbpgovcnhrigpu jiop qbfkhreewsyn
vourdqyu mrwy abwhxysj lnsjhxihtelmjbslu
dzmla jhsnbcc wocfag tlfho bmp wpyhpawesl o  zv
dvveqhkyji u azk    dgzvsoqaamjfhgjy afcesfxsfjzrp
uuyxtbntb f pqutku   zyyskprbgzfhecd wynekb 
fnshvmptsv clglwfvfkynwutmbftom qgnmxfhr uarh
n jadnpbrktavqojwstmg w liwmtfykynlkdbrus undee wzsd
qef owpgu mrsuuateshbhr mxdmrnghsqc nx rysjxtlxpqrix vfs

output: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Expected: 8 8 7 11 11 12 12 6 11 10 8 11 10 5 10 9

char 不是 std 的成员,它是关键字。 std::getline 接受 std::string。因此,将 x 声明为 std::string,并将 std::cin 作为第一个参数传递给 std::getline

http://en.cppreference.com/w/cpp/string/basic_string/getline

std::getline 将输入流作为其第一个参数。您传递的是 std::char(这实际上没有意义,因为 char 是关键字)。