一道练习题:请编写一段程序,统计元音字母,空格、制表符和换行符以及ff,fl,fi的数量。
分析一下这道题,其实有3层意思:元音一层,符号一层,双字母一层。
刚开始我用的是string型+switch来处理元音一层和双字母一层可以解决。当我将符号也添加进switch时发现无法统计,查阅书籍后才明白:string对象会自动忽略开头的空白(即空格符、换行符、制表符)并从第一个真正的字符开始读起,直到遇到下一处空白为止。所以用string来处理不可行。
然后,我又换做getline(cin,str)来处理,结果是换行符无法统计,查书后明白:getline函数从给定的输入流中读入内容,直到遇到换行符为止(换行符也被读进来),然后把所读内容存入string对象中(不存换行符)。getline只要一遇到换行符就结束操作并返回结果。由此可见,getline也不能实现。
好吧,只能用char类型了。这回元音和符号是实现了,可是双字母又卡克了。(想了很长时间)在快睡觉的时候突然就想到了一个方法,在case:‘f’后面再加输入函数,在判断。今早一试果然完美实现。代码如下:
case 'f':
istr=cin.get();
if(istr=='f')++ffcnt;
if(istr=='l')++flcnt;
if(istr=='i')++ficnt;
break;
附:1、在解决这个问题时遇到了一个问题:关于文本结束符Ctrl+Z不灵。上网查了一下,按网友说得修改代码如下
istr=cin.get();
while(istr!=EOF)
在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以
字符的
ASCII代码值的形式存放。我们知道,
ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。——摘录百度百科EOF
2、以上查阅书籍均为《C++Primer中文版(第5版)》 王刚 杨巨峰 译 电子工业出版社