林和我PROGRAMM麻煩應該算在一個字符串中的每個符號用戶發送到流。它包括輔音,元音,'ff','fl','fi'和'\ t','\ n'和''。問題是程序設計工作得很好,但仍然沒有計算空格,製表符和新行。我試圖使用noskipws機械手,但它沒有讀取任何東西,直到第一個字。計數使用空格,製表符和新線,而(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