为什么无法统计空格、制表键和换行符的数目?
就是这个程序,不管你怎么输入,最后三项的数值都是0.怎么回事呢?
空格 switch
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
void keep_window_open();
int main()
{
char ch;
// initialize counters for each vowel
unsigned aCnt=0, eCnt=0, iCnt=0, oCnt=0, uCnt=0, spcCnt=0, tabCnt=0,newlineCnt=0;
while(cin>>ch)
{
//if ch is a vowel, increment the appropriate counter
switch (ch)
{
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 ' ':++spcCnt;break;
case '\t':++tabCnt;break;
case '\n':++newlineCnt;break;
default:break;
}
}
// print results
cout << "\nNumber of vowel a:\t"<<aCnt <<endl
<< "Number of vowel e:\t"<<eCnt <<endl
<< "Number of vowel i:\t"<<iCnt <<endl
<< "Number of vowel o:\t"<<oCnt <<endl
<< "Number of vowel u:\t"<<uCnt <<endl
<< "Number of space:\t"<<spcCnt <<endl
<< "Number of tab:\t"<<tabCnt <<endl
<< "Number of newline:"<<newlineCnt <<endl;
keep_window_open();
}
void keep_window_open()
{
cout << "\nPress any key to exit:";
getchar();
}
[解决办法]
不对 /r/n这个底层细节 被屏蔽了
cin来说 按下回车就接受到\n
[解决办法]
cin>> 不接受空白字符
[解决办法]
cin 使用空白(空格、制表符和换行符)来定字符的界。
在cin>>char 的时候,cin将忽略空格和换行符。
[解决办法]
while((ch=getchar())!=eof)
如果我没记错的话,k&r里有这个例子,不过那个是统计的总字数
[解决办法]
cin.get() 一次读取一个字符,且不忽略任何空白。
code:
#include <iostream>
using namespace std;
int main()
{
char c;
int count[8] = {};
while ((c = cin.get()) != EOF)
{
switch(c)
{
case 'a':
case 'A':
count[0]++;
break;
case 'e':
case 'E':
count[1]++;
break;
case 'i':
case 'I':
count[2]++;
break;
case 'o':
case 'O':
count[3]++;
break;
case 'u':
case 'U':
count[4]++;
break;
case ' ':
count[5]++;
break;
case '\t':
count[6]++;
break;
case '\n':
count[7]++;
break;
default:
break;
}
}
for (int i = 0, len = sizeof count / sizeof count[0];
i < len; ++i)
{
cout << count[i] << endl;
}
return 0;
}