私のプログラムに問題があり、ユーザがストリームに送信した文字列のすべてのシンボルをカウントする必要があります。子音、母音、 'ff'、 'fl'、 'fi'、 '\ t'、 '\ n'、 ''をカウントします。問題は、プログラマーはかなりうまくいくが、まだスペース、タブ、新しい行を数えていないことである。私はnoskipwsマニピュレータを使用しようとしましたが、それは最初の単語まで何も読んでいません。while(cin >>)を使用してスペース、タブ、および改行を計算する
ここにある:
int aCnt=0, eCnt=0, iCnt=0, oCnt=0, uCnt=0,
consonantCnt=0;
int ffCnt = 0, flCnt = 0, fiCnt = 0;
int spaceCnt = 0, newlCnt = 0, tabCnt = 0;
char *check = new char[100];
while (cin >> check) {
for (int ix = 0; ix < strlen(check); ++ix) {
switch (check[ix]) {
case 'a': case 'A':
++aCnt;
break;
case 'e': case 'E':
++eCnt;
break;
case 'i': case 'I':
++iCnt;
break;
case 'o': case 'O':
++oCnt;
break;
case 'u': case 'U':
++uCnt;
break;
case ' ':
++spaceCnt;
break;
case '\t':
++tabCnt;
break;
case '\n':
++newlCnt;
break;
default:
if (isalpha(check[ix]))
++consonantCnt;
break;
}
if (check[ix] == 'f') {
++ix;
switch (check[ix]) {
case 'f':
++consonantCnt;
++ffCnt;
break;
case 'i':
++fiCnt;
++iCnt;
break;
case 'l':
++consonantCnt;
++flCnt;
break;
case 'I':
++iCnt;
break;
case 'a': case 'A':
++aCnt;
break;
case 'e': case 'E':
++eCnt;
break;
case 'o': case 'O':
++oCnt;
break;
case 'u': case 'U':
++uCnt;
break;
case ' ':
++spaceCnt;
break;
case '\t':
++tabCnt;
break;
case '\n':
++newlCnt;
break;
default:
if (isalpha(check[ix]))
++consonantCnt;
break;
}
}
}
}
delete [] check;
cout << "Встретилась a: \t" << aCnt << '\n'
<< "Встретилась e: \t" << eCnt << '\n'
<< "Встретилась i: \t" << iCnt << '\n'
<< "Встретилась o: \t" << oCnt << '\n'
<< "Встретилась u: \t" << uCnt << '\n'
<< "Встретилось согласных: \t" << consonantCnt << '\n'
<< "Встретилось fl: \t" << flCnt << '\n'
<< "Встретилось fi: \t" << fiCnt << '\n'
<< "Встретилось ff: \t" << ffCnt << '\n'
<< "Встретилось символов табуляции: \t" << ffCnt << '\n'
<< "Встретилось символов пробела: \t" << ffCnt << '\n'
<< "Встретилось символов новой строки: \t" << ffCnt << '\n'
<< '\n';
std :: stringを使用します。 std :: getlineで行を読んでください。 strlenのような関数は使わないでください。 –
これは後で試してみます。ありがとうございました! – FishTheBig