C Primer Plus 第7章 C控制语句:分支和跳转 7.4 一个统计字数的程序
2019独角兽企业重金招聘Python工程师标准>>>
首先,这个程序应该逐个读取字符,并且应该有些方法判断何时停止;第二,它应该能够识别并统计下列单位:字符、行和单词。下面是伪代码描述:
read a character
while there is more inputincrement character count if a line has been read ,increment line countif a word has been read ,increment word countread next character
前面已经有输入循环的模型了:
while ((ch=getchar())!=STOP)
{....
}
这里的STOP代表通知输入结束的ch取值。现在我们暂且选择一个在文本中不常见的字符(|)。
现在来考虑一下循环体。因为程序使用getchar()来输入字符,所以可以在每个循环周期通过递增一个计数器的值来统计字符 。为了统计行数,程序可以检查换行符。如果字符 是换行符,程序就递增行数计数器的值。有个问题是如果STOP字符出现在一行的中间该 怎么办?行数计数应不应该增加呢?一种做法是将它作为一个不完整的行统计,也就是说,该行有字符 而没有换行符。可以通过追踪前一个字符来识别这种情况 。如果STOP之前所读入的最后一个字符不是换行符,就计数一个不完整行。
最棘手的部分是识别单词,首先,必须明确定义一个单词意味着什么。让我们以一个相对简单的方法将一个单词定义为不包含空白字符的一系列字符。一个单词以程序首次遇到非空白字符开始,在下一个空白字符出现时结束。使用ctype.h中的isspace( )函数会更简单。如果C是空白字符,isspace(c)为真,如果c不是空白字符!isspace(c)为真。
为了知道一个字符是不是在某单词里,可以在读入一个单词的首字符时把一个标志(命名为inword)设置为1。也可以在此处递增单词的计数。
然后,只要inword保持为1,后续的非空白字符就不标记为一个单词的开始。到出现下一个空白字符时,必须将此标志重置为0,并且程序准备搜索下一个单词。
if c is not whitespace and inword is falseset inword to true and count the word
if c is whitespace and inword is trueset inword to false
这种方法在每个单词开始时将inword设置为1,而在每个单词结束时将其设置为0.仅在该标志从0变为1时对单词计数。
//word.c --统计字符、单词和行
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#define STOP '|'
int main(void)
{char c ; //读入字符char prev; //前一个字符long n_chars=0L; //字符数int n_lines=0; //行数int n_words=0; //单词数int p_lines=0; //不完整的行数bool inword=false; //如果c在一个单词中,则inword等于trueprintf("Enter text to be analyzed(| to terminate): \n");prev='\n'; //用于识别完整的行while((c=getchar())!=STOP){n_chars++; //统计字符if(c=='\n')n_lines++; //统计行数if(!isspace(c)&&!inword){inword=true; //开始一个新单词n_words++; //统计单词}if(isspace(c)&&inword)inword=false; //到达单词尾部prev=c; //保存字字符值}if(prev!='\n')p_lines=1;printf("characters=%ld,words=%d,lines=%d,",n_chars,n_words,n_lines);printf("partial lines = %d\n",p_lines);return 0;
}
转载于:https://my.oschina.net/idreamo/blog/693719
C Primer Plus 第7章 C控制语句:分支和跳转 7.4 一个统计字数的程序相关推荐
- C语言基础之7:C控制语句---分支和跳转
Tips1: 关键字:if.else.switch.continue.break.case.default.goto 运算符:&&.||.?: 函数:getchar().putchar ...
- C Primer Plus 第6章 C控制语句 6.16 编程练习及答案
2019独角兽企业重金招聘Python工程师标准>>> 1.编写一个程序,创建一个具有26个元素的数组,并在其中存储26个小写字母.并让该程序显示该数组的内容. #include i ...
- C Primer Plus 第6章 C控制语句:循环 6.3 关系运算符和表达式
2019独角兽企业重金招聘Python工程师标准>>> 关系运算符 运算符 含义 < 小于 <= 小于等于 == 等于 >= 大于等于 > 大于 != 不等于 ...
- C Primer Plus 第7章 C控制语句:分支和跳转 7.1 if语句
2019独角兽企业重金招聘Python工程师标准>>> 这个程序读入一系列每日的最低温度(摄氏度),并报告输入的总数,以及最低温度在零度以下的天数的百分率.在一个循环里使用scanf ...
- C Primer Plus 第6章 C控制语句:循环 6.9 选择哪种循环
2019独角兽企业重金招聘Python工程师标准>>> 首先要确定您需要入口条件循环还是退出条件循环.通常是需要入口条件循环.首先是因为一般原则是在跳过(或循环)之前进行查看要比之后 ...
- [转载] C Primer Plus 第6章 C控制语句 6.16 编程练习及答案
参考链接: 用Python打印金字塔图案的程序 2019独角兽企业重金招聘Python工程师标准>>> 1.编写一个程序,创建一个具有26个元素的数组,并在其中存储26个小写字母.并 ...
- 《C Primer Plus》第七章--C控制语句:分支和跳转(if else switch continue break goto 逻辑运算符ctype.h)
文章目录 C控制语句:分支和跳转 本章内容 if语句 if else语句 另一个示例:介绍getchar()和putchar() ctype.h系列的字符函数 多重选择else if else与if配 ...
- 第7章 C控制语句:分支和跳转
学习笔记--<C Prime Plus> 第7章 C控制语句:分支和跳转 7.1 if 语句 7.2 if else 语句 7.2.1 介绍 getchar() 和 putchar() 7 ...
- C++ Primer Plus 第七章编程题练习
C++ Primer Plus 第七章编程题练习 第一题 题目描述 编写一个程序,不断要求用户输入两个数,直到其中的一个为0.对于每两个数,程序将使用一个 函数来计算它们的调和平均数,并将结果返回给m ...
最新文章
- 使用GetNextCell或者GetCell输出vtkCellArray的坐标点
- javascript捕获ocx事件
- 计算机组成原理模拟试题,计算机组成原理模拟试题及答案
- Lucene学习总结之二:Lucene的总体架构
- java怎么确定数据在区间内_处理数据时,单元格内内容太多无法计数怎么破?...
- 小米手机安装证书(安卓)
- java登陆session用法_Java web 登录 使用shiro和基于session的方式有何不同?
- 最大素数的c语言,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
- 机房部署环境和划分多vlan的好处
- python命令符bash_从python结构执行远程bash命令时“转义”$
- 服务器网站中断,如何解决无法打开网页及服务器已断开连接的问题?
- excel技巧——F9键
- 微信小程序列表图片加载错误处理
- React上拉加载和下拉刷新
- python提取excel一列或多列数据另存为新表(1)
- c语言编程一个数的质子求出来,量子力学第一章课外练习题
- gms认证流程_【热点资讯】详解Google GMS认证流程可大大缩短终端手机上市时间...
- C语言中的fprintf函数
- 门禁系统一定要服务器吗,门禁系统服务器功能配置
- kirin710f是什么处理器_hisilicon kirin710什么处理器