下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言统计文件中的字符数单词数以及总行数统计文件的字符数、单词数以及总行数,包括:每行的字符数和单词数文件的总字符数、总单词数以及总行数注意:空白字符(空格和tab缩进)不计入字符总数:单词以空格为分隔;不考虑一个单词在两行的情况;限制每行的字符数不能超过1000 o代码如下#include #inelude int *getCharNum(char 水filename, int *totalNum);int main()char filename30;/totalNum0:总行数 totalNumfl:总字符数 totalNum2:总单词数int totalNum二0, 0, 0;print
2、f(”lnput file name:n);scanf(,%s/ filename);if(getCharNum(filename, totalNum)printf(HTotal: %d lines, %d words, %d charsXn, totalNum0, totalNum2, totalNuml);elseprintffErrorlXn);return 0;/*统计文件的字符数、单词数、行数* param filename 文件名* param totalNum 文件统计数据* return成功返回统计数据,否则返回NULL*/int *getCharNum(char 水filen
3、ame, int *totalNum)FILE *fp; 指向文件的指针char buffer1003; 缓冲区,存储读取到的每行的内容int bufferLen; 缓冲区中实际存储的内容的长度int i; /当前读到缓冲区的第i个字符chare; /读取到的字符int isLastBlank = 0; /上个字符是否是空格int charNum = 0; 当前行的字符数int wordNum = 0; 11当前行的单词数if( (fp=fopen(filename/ rb) = NULL)perror(filename);return NULL;printf(”line words char
4、snJ;每次读取一行数据,保存到buffer,每行最多只能有1000个字符 while(fgets(buffer, 1003, fp) != NULL)bufferLen = strle n(buffer);/遍历缓冲区的内容for(i=0; ibufferLen; i+)c = bufferi;if( c=* 11 c=f) 遇到空格!isLastBlank & wordNum+; /如果上个字符不是空格,那么单词数加1 isLastBlank = 1;else if(c!=*n&c!=r) 忽略换行符 charNum+; /如果既不是换行符也不是空格,字符数加1 isLastBlank =
5、 0;isLastBlank & wordNum+; 如呆最后一个字符不是空格,那么单词数加1 isLastBlank = 1; 每次换行重置为1/ 一行结束,计算总字符数、总单词数、总行数totalNum0+; 总行数totalNumfl += charNum; 总字符数 totalNum2 += wordNum; 总单词数 printf(%-7d%-7d%dnz totalNum0, wordNum, charNum);/置零,重新统计下一行charNum = 0; wordNum = 0;return totalNum;在D盘下创建文件demo.txt,并输入如下的内容:I am Chi
6、nese I love my countryChina has 960 square kilometers of territory.China has a population of 1 35 billion.The capital of China is BeijingBy gunge2014-10-12运行程序,输出结果为:Input file name: d:/demo. txtline words chars1 7262 7393 7334 6275 006 277 008 110Total: 8 lines, 30 words, 142 chars上面的程序,每次从文件中读取一行,
7、放到缓冲区buffer,然后遍历缓冲区,统计当前行的 字符和单词数。fgets()函数用于从文件中读取一行或指定个数的字符,其原型为:char * fgets(char * buffer, int size, FILE * stream);参数说明:buffer为缓冲区,用来保存读取到的数据。size为要读取的字符的个数。如果该行字符数大于size-1,则读到size-1个字符时结束,并 在最后补充(T;如果该行字符数小于等于size-1,则读取所有字符,并在最后补充AOo 即,每次最多读取size-1个字符。读取的字符包拾换行符。stream为文件指针。有的读者问,为什么不使用getc(),每次从文件中读取一个字符,也无需开辟缓冲区。这样没有问题,但是在处理换行时要注意跨平台问题,因为不同的平台对文本文件换行的处 理不一样,Linux以、n,为换行符,Windows以nr,为换行符,Mac又以rrV为换行符。所以, 使用getc()函数处理换行时比较麻烦。这里去繁就简,通过fgets()读取整行数据,然后再处理每个字符,直接忽略F和、儿 注意:由于每行的结尾会有最多2个字节长度的换行符,馆ets()还会添加NUL,所以缓冲区 的长度至少为1003,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论