需求分析:

1.写出一个程序,模仿wc.exe,通过输入文件名,实现文件内容读取;

2.统计出文件内容的总字符数、总单词数、行数、每行字符数、每行单词数。

代码分析:

一.打开文件。

    FILE *fp;
char filename[], con[];
gets(filename);//读取文件名
if ((fp = fopen(filename, "r")) == NULL)
{
printf("无法打开该文件!");
return;//用exit(0)报错,后修正为return
}

二.读取文件。

fgets(con, , fp);//将文件中的内容读取到con中,遇到'\n'或者读取500个字符结束

三.统计每行字符个数。

int charcounter(char* con)//统计每行字符个数
{
int num = ,i=;
for (i = ; i < strlen(con); i++)
{
if (con[i] != '\n'&&con[i] != ' '&&con[i] != '\t')
{
num++;
}
}
return num;
}

四.统计每行是否为空行,利用返回值是否为真,计算有效行数。

bool linenum(char* con)//判断每行是否为空行
{
if (charcounter(con) != )
return true;
return false;
}

五.计算每行的单词个数。

int wordnum(char* con)//计算单词数
{
int n = , i;
for (i = ; i < strlen(con); i++)
{
if ((con[i]>'a'&&con[i]<'z')||(con[i]>'A'&&con[i]<'Z'))//单词的第一个字符为字母
{
while (i<strlen(con))
{
if (!((con[i] >= 'a'&&con[i] <= 'z') || (con[i] >= 'A'&&con[i] <= 'Z') || con[i] == '.'|| con[i] == '_' || (con[i] >= '' &&con[i] <= '')))//首字母后的字符不为字母、数字、下划线、小数点时
{
n++;
break;
}
i++;
}
}
}
return n;
}

六.计算总字符数,调用子函数charcounter(con)。

connum = connum + charcounter(con);

七.计算总单词数,调用子函数wordnum(con)。

wordn = wordn + wordnum(con);

源程序运行效果图如下:

源码已上传coding。如下:

 #include<stdio.h>
#include<string.h>
int charcounter(char* con)//统计每行字符个数
{
int num = ,i=;
for (i = ; i < strlen(con); i++)
{
if (con[i] != '\n'&&con[i] != ' '&&con[i] != '\t')
{
num++;
}
}
return num;
}
bool linenum(char* con)//判断每行是否为空行
{
if (charcounter(con) != )
return true;
return false;
} int wordnum(char* con)//计算单词数
{
int n = , i;
for (i = ; i < strlen(con); i++)
{
if ((con[i]>'a'&&con[i]<'z')||(con[i]>'A'&&con[i]<'Z'))//单词的第一个字符为字母
{
while (i<strlen(con))
{
if (!((con[i] >= 'a'&&con[i] <= 'z') || (con[i] >= 'A'&&con[i] <= 'Z') || con[i] == '.'|| con[i] == '_' || (con[i] >= '' &&con[i] <= '')))//首字母后的字符不为字母、数字、下划线、小数点时
{
n++;
break;
}
i++;
}
}
}
return n;
}
void main()
{
FILE *fp;
int connum=,m=,wordn=;
char filename[], con[];
printf("请输入文件名\n");
gets(filename);//读取文件名
if ((fp = fopen(filename, "r")) == NULL)
{
printf("无法打开该文件!");
return;//用exit(0)报错,后修正为return
}
int i = ;
while (!feof(fp))
{
printf("第%d行 ", i);
i++;
fgets(con, , fp);//将文件中的内容读取到con中,遇到'\n'或者读取500个字符结束
printf("%d个字符", charcounter(con));
printf("%d个单词", wordnum(con));
puts(con);
connum = connum + charcounter(con);
wordn = wordn + wordnum(con);
if (linenum(con))
m++;
}
printf("---以上共有%d行(除空行外),共有%d个字符.", m, connum);
printf("共有%d个单词", wordn);
gets(con);
fclose(fp);
}

最新文章

  1. [SHOI2008]堵塞的交通traffic
  2. 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储
  3. Java基础-包名和文件夹名字必须对应
  4. Struts2从一个action转到另一个action的两种方法
  5. iOS开发-- 利用AVPlayer播放远程音乐和视频
  6. day14_API第四天
  7. Firefox火狐添加书签功能失灵解决办法
  8. 链表C++模板实现
  9. Formatting is Specified but argument is not IFormattable
  10. 利用case when 减少表扫描次数
  11. ArtisticStyle----很好用的C/C++样式格式化工具
  12. Linux学习笔记11——文件I/O之二
  13. python运维开发(十一)----python操作缓存memcache、redis
  14. BZOJ 1269: [AHOI2006]文本编辑器editor( splay )
  15. 用vue开发一个app(2,main.js)
  16. jmeter--简单的接口测试(GET/POST)
  17. web性能优化之---JavaScript中的无阻塞加载性能优化方案
  18. ANTLR v4 专业术语集
  19. 【题解】Luogu P2730 魔板
  20. idea debug info can be unavailable. Please close other application using ADB: Monitor, DDMS, Eclipse

热门文章

  1. Discrete.Differential.Geometry-An.Applied.Introduction(sig2008)笔记
  2. [转]mysql在windows下支持表名大小写,lower_case_table_names
  3. phpmyadmin的root密码忘记了怎么办?
  4. Spring Integration
  5. 针对WebService服务,客户端调用时报序列化的最大项数maxItemsInObjectGraph超过65536问题
  6. 【转】el表达式的判断符
  7. nginx日志分割脚本
  8. Linux系统安全保护措施
  9. syntax error near unexpected token `then'问题的解决
  10. SVN外链