WordCount C语言实现求文本的字符数,单词数,行数
1.码云地址:
https://gitee.com/miaomiaobobo/WordCount
2.psp表格
PSP2.1表格
|
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
|
Planning |
计划 |
25 |
20 |
|
· Estimate |
· 估计这个任务需要多少时间 |
10 |
5 |
|
Development |
开发 |
200 |
350 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
25 |
20 |
|
· Design Spec |
· 生成设计文档 |
30 |
20 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
40 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
15 |
|
· Design |
· 具体设计 |
20 |
40 |
|
· Coding |
· 具体编码 |
200 |
300 |
|
· Code Review |
· 代码复审 |
20 |
40 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
60 |
|
Reporting |
报告 |
20 |
20 |
|
· Test Report |
· 测试报告 |
15 |
10 |
|
· Size Measurement |
· 计算工作量 |
10 |
10 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
30 |
|
合计 |
665 |
950 |
误差分析:本次项目的主要误差存在于具体的编码和开发阶段,因为前期自己对文件的使用不熟悉以及上传到码云的初次接触,导致在这些地方耗费了大量的时间(总计多出200分钟左右)
3.需求功能分析
WordCount的需求:能够通过cmd执行.exe程序,并且传入文本文件,然后对其中的字符数,单词书,行数进行计算,并将结果保存在.exe程序的同级别目录下。
解题思路:1.通过cmd的命令行向main函数中传入操作方式与相应的文件。
2.通过设置flag记录上一个字符是否为空格结合当前是否为空格来判断单词数;
3.判断是否有“\n”来 确定行数。
其中,C语言实现WordCount参考链接:https://www.cnblogs.com/xiaobao123/articles/9649687.html
字符指针数组的空间分配参考链接:https://www.cnblogs.com/mensanu/p/7979462.html
4.程序设计
程序总共包含4个函数(main,countw,countc,countl)其中,main为主函数,通过传入的操作数不同分别调用不同的函数,
主要的模块有:
1.单词数的统计,当遇到空格时,如果上一个字符不是空格,则可判断这是一个新单词
while(fgets(buffer, , fp) != NULL){
bufferLen = strlen(buffer);
for(i=; i<bufferLen; i++){
c = buffer[i];
if( c==' ' || c=='\t'){
!isLastBlank && wordNum++; //当上一个不是空格,而这一个是空格时单词数+1
isLastBlank = ;//表明一个空格
}else if(c!='\n'&&c!='\r'){
isLastBlank = ;
}
}
!isLastBlank && wordNum++;
2.主函数,将cmd的操作指令传入,并通过函数strcmp进行比较,调用不同的函数:
int main(int argc,char* argv[]){
char filname[];
char operation;
int totalline;//总行数
int toalchar;//总字符数
int totalword;//总单词数
if(!strcmp(argv[],"-w"))
countw(argv[]);
else if(!strcmp(argv[],"-c"))
countc(argv[]);
else if(!strcmp(argv[],"-l"))
countl(argv[]);
return ;
}
5.具体代码(具体代码也可参考码云链接中的.cpp文件)
#include <stdio.h>
#include <string.h>
#include<malloc.h>
int countw(char *filename);
int countc(char *filename);
int countl(char *filename); int main(int argc,char* argv[]){
char filname[];
char operation;
int totalline;//总行数
int toalchar;//总字符数
int totalword;//总单词数
if(!strcmp(argv[],"-w"))
countw(argv[]);
else if(!strcmp(argv[],"-c")) countc(argv[]);
else if(!strcmp(argv[],"-l"))
countl(argv[]);
return ;
} int countw(char *filename){
FILE *fp=NULL;
FILE *fp2=NULL;
char buffer[];
int bufferLen;
int i;
char c;
int isLastBlank = ;
int totalword=;
int wordNum = ;
if( (fp=fopen(filename, "rb")) == NULL ){
perror(filename);
return NULL;
} while(fgets(buffer, , fp) != NULL){
bufferLen = strlen(buffer); for(i=; i<bufferLen; i++){
c = buffer[i];
if( c==' ' || c=='\t'){
!isLastBlank && wordNum++; //当上一个不是空格,而这一个是空格时单词数+1
isLastBlank = ;//表明一个空格
}else if(c!='\n'&&c!='\r'){ isLastBlank = ;
}
}
!isLastBlank && wordNum++;
isLastBlank = ;
totalword += wordNum;
wordNum = ;
}
printf("totalword:%d ",totalword);
fp2=fopen("result.txt","a");
if(fp2){
fprintf(fp2,"单词总数:%d\n",totalword);
fclose(fp2);
}
return ;
}
int countc(char *filename){ FILE *fp=NULL;
FILE *fp2=NULL;
char buffer[];
int bufferLen;
int i;
char c;
int isLastBlank = ;
int totalchar=;
int charNum = ;
if( (fp=fopen(filename, "rb")) == NULL ){
perror(filename);
return NULL;
}
while(fgets(buffer, , fp) != NULL){
bufferLen = strlen(buffer);
for(i=; i<bufferLen; i++){
c = buffer[i];
if( c==' ' || c=='\t'){
isLastBlank = ;//字符不统计空格
}else if(c!='\n'&&c!='\r'){
charNum++;
isLastBlank = ;
}
} isLastBlank = ; totalchar += charNum; charNum = ; }
printf("totalchar:%d",totalchar);
fp2=fopen("result.txt","a");
if(fp2){
fprintf(fp2,"字符总数:%d\n",totalchar);
fclose(fp2);
}
return ;
} int countl(char *filename){
FILE *fp=NULL;
FILE *fp2=NULL;
char buffer[];
int bufferLen;
int i;
char c;
int totalline=-;
if( (fp=fopen(filename, "rb")) == NULL ){
perror(filename);
return NULL;
} while(fgets(buffer, , fp) != NULL){
bufferLen = strlen(buffer);
for(i=; i<bufferLen; i++){
c=buffer[i];
if(c=='\n'||c=='\r'){
totalline++; }
}
}
printf("totalline:%d",totalline);
fp2=fopen("result.txt","a");
if(fp2){
fprintf(fp2,"总行数:%d\n",totalline);
fclose(fp2);
}
return ; }
All Code
6.本程序的测试
cmd测试命令行:

待测试的文件:

处理的结果:

7.个人项目总结
本次项目,学到的很多新知识。但是在项目开始的时候,我本来对文本的处理不是很熟悉,所以在这方面花费了很多时间,之后通过cmd运行可执行文件也耗费了我大量的时间。所以,这个项目虽然实现的功能比较简单,但总的花费我差不多一天的时间,但收获也是巨大的,也明白了自己的不足。项目本身存在着一些缺陷,包括对错误操作的提示不足,只能进行单一文件处理等,都需要改进。
8.参考资料
1.C语言实现WordCount参考链接:https://www.cnblogs.com/xiaobao123/articles/9649687.html
2. 字符指针数组的空间分配参考链接:https://www.cnblogs.com/mensanu/p/7979462.html
3.%s在c语言中对于空格的处理 : http://bbs.bccn.net/thread-352772-1-1.html
4.git的使用:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/
WordCount C语言实现求文本的字符数,单词数,行数的更多相关文章
- c - 统计字符串"字母,空格,数字,其他字符"的个数和行数.
#include <stdio.h> #include <ctype.h> using namespace std; /* 题目:输入一行字符,分别统计出其中英文字母.空格.数 ...
- java语言实现对程序设计语言源文件统计字符数、单词数、行数及其他拓展功。
本次作业Github项目地址:https://github.com/YiChenglong2018/WordCount 一.项目简介 本项目的需求可以概括为:对程序设计语言源文件统计字符数.单词数.行 ...
- 翻译器DIY它———算在英文文本中的单词数,字符和行数
咳咳.这部分应该是序列化编译器DIY的,然而,在这样做DIY第一次使用前flex 为了练练手,对于后者的理解是有帮助. 在word 我经常看到一个字计数功能,因此,它是如何实现,当然,首先想到的是要经 ...
- C++实现文件内字符数、单词数、行数的统计
先给出github上的代码链接以及项目需求 1. 项目简介 这个项目的需求可以概括为:对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处 ...
- Android 简单统计文本文件字符数、单词数、行数Demo
做的demo是统计文本文件的字符数.单词数.行数的,首先呢,我们必须要有一个文本文件.所以我们要么创建一个文本文件,并保存,然后再解析:要么就提前把文本文件先放到模拟器上,然后检索到文本名再进行解析. ...
- java:打印菱形图案(传参打印的自定义字符和行数)
打印菱形图案: 代码实现: public class Hello { public static void main(String args[]) { LingXingPrint("#&qu ...
- 如何修改word文档中每行字符的最大默认值和每页最大行数默认值
事情起因是这样的,小明在写论文的过程中,发现自己的文档的字与字的间距看起来比其他人的字符间距大,于是觉得奇怪,明明设置了一样的格式啊,设置每行38个字符,每页34行,为什么小明写的文档字符间距看着比较 ...
- Swift语言指南(十)--字符串与字符
原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...
- python_计算一段文本各个字符的出现个数
>题目要求 任意给定一段文本,求出每个字符出现的个数,并且打印出来 >程序实现 import pprint str01 = "重庆市,简称巴和渝,别称山城.渝都.雾都.桥都,中华 ...
随机推荐
- STL扩展容器
string | array | hash 1. string - 可以视为以字符为元素的一种容器, 可以在字符上进行遍历, 提供begin()/end() - 为了支持迭代器和迭代器适配器 , st ...
- app里面嵌套的H5页面上电话号码怎么才能点击拨号?
代码: <p>联系我们:<a href="tel://66666666666">66666666666</a> </p>
- (转)DataTable与结构不同实体类之间的转换
原文地址:http://www.cnblogs.com/kinger906/p/3428855.html 在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我 ...
- Python + HTMLTestRunner + smtplib 完成测试报告生成及发送测试报告邮件
一下代码是自己结合教材,并结合以往用到的实例编写的代码,可以做为参考 import smtplib from email.mime.text import MIMEText from email.mi ...
- linux安装redis及phpredis环境配置
下载安装包 cd /home/redis/tar wget http://redis.googlecode.com/files/redis-2.4.17.tar.gz tar zxvf redis-2 ...
- css flex cheat sheet
.container{ display: -webkit-flex/inline-flex; display: -moz-flex/inline-flex; display: -ms-flex/inl ...
- android开发内存优化之软引用
所有Android的开发者一定都遇到过内存溢出这个头疼的问题,一旦出现这个问题,很难直接确定我们的应用是那里出了问题,要想定位问题的原因,必须通过一些内存分析工具和强大的经验积累才能快速的定位到问题具 ...
- base64编码问题
最近遇到一个很奇怪的问题:post方式上传文件,因为文件不大,所以直接base64后作为参数扔给服务器.一开始好用,后来出问题了,上传的压缩包再下载后,能双击打开看到压缩包里面的文件,但是解压就报错, ...
- .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查
上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod kubectl create -f netcore-pod.yaml ...
- 结构(struct)
结构是程序员定义的数据类型,非常类似于类.都包含数据成员和函数成员. 区别:1.类是引用类型,而结构是值类型 2.结构是隐式密封的,也就是结构不能被派生. 结构类型和所有值类型一样,含有自己的数据.需 ...