第三周作业--Word Counter
需求分析:
1.写出一个程序,模仿wc.exe,通过输入文件名,实现文件内容读取;
2.统计出文件内容的总字符数、总单词数、行数、每行字符数、每行单词数。
代码分析:
一.打开文件。
FILE *fp; char filename[100], con[500]; gets(filename);//读取文件名 if ((fp = fopen(filename, "r")) == NULL) { printf("无法打开该文件!"); return;//用exit(0)报错,后修正为return }
二.读取文件。
fgets(con, 500, fp);//将文件中的内容读取到con中,遇到'\n'或者读取500个字符结束
三.统计每行字符个数。
int charcounter(char* con)//统计每行字符个数 { int num = 0,i=0; for (i = 0; i < strlen(con); i++) { if (con[i] != '\n'&&con[i] != ' '&&con[i] != '\t') { num++; } } return num; }
四.统计每行是否为空行,利用返回值是否为真,计算有效行数。
bool linenum(char* con)//判断每行是否为空行 { if (charcounter(con) != 0) return true; return false; }
五.计算每行的单词个数。
int wordnum(char* con)//计算单词数 { int n = 0, i; for (i = 0; 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] >= '0' &&con[i] <= '9')))//首字母后的字符不为字母、数字、下划线、小数点时 { n++; break; } i++; } } } return n; }
六.计算总字符数,调用子函数charcounter(con)。
connum = connum + charcounter(con);
七.计算总单词数,调用子函数wordnum(con)。
wordn = wordn + wordnum(con);
源程序运行效果图如下:
源码已上传coding。如下:
1 #include<stdio.h> 2 #include<string.h> 3 int charcounter(char* con)//统计每行字符个数 4 { 5 int num = 0,i=0; 6 for (i = 0; i < strlen(con); i++) 7 { 8 if (con[i] != '\n'&&con[i] != ' '&&con[i] != '\t') 9 { 10 num++; 11 } 12 } 13 return num; 14 } 15 bool linenum(char* con)//判断每行是否为空行 16 { 17 if (charcounter(con) != 0) 18 return true; 19 return false; 20 } 21 22 int wordnum(char* con)//计算单词数 23 { 24 int n = 0, i; 25 for (i = 0; i < strlen(con); i++) 26 { 27 if ((con[i]>'a'&&con[i]<'z')||(con[i]>'A'&&con[i]<'Z'))//单词的第一个字符为字母 28 { 29 while (i<strlen(con)) 30 { 31 if (!((con[i] >= 'a'&&con[i] <= 'z') || (con[i] >= 'A'&&con[i] <= 'Z') || con[i] == '.'|| con[i] == '_' || (con[i] >= '0' &&con[i] <= '9')))//首字母后的字符不为字母、数字、下划线、小数点时 32 { 33 n++; 34 break; 35 } 36 i++; 37 } 38 } 39 } 40 return n; 41 } 42 void main() 43 { 44 FILE *fp; 45 int connum=0,m=0,wordn=0; 46 char filename[100], con[500]; 47 printf("请输入文件名\n"); 48 gets(filename);//读取文件名 49 if ((fp = fopen(filename, "r")) == NULL) 50 { 51 printf("无法打开该文件!"); 52 return;//用exit(0)报错,后修正为return 53 } 54 int i = 1; 55 while (!feof(fp)) 56 { 57 printf("第%d行 ", i); 58 i++; 59 fgets(con, 500, fp);//将文件中的内容读取到con中,遇到'\n'或者读取500个字符结束 60 printf("%d个字符", charcounter(con)); 61 printf("%d个单词", wordnum(con)); 62 puts(con); 63 connum = connum + charcounter(con); 64 wordn = wordn + wordnum(con); 65 if (linenum(con)) 66 m++; 67 } 68 printf("---以上共有%d行(除空行外),共有%d个字符.", m, connum); 69 printf("共有%d个单词", wordn); 70 gets(con); 71 fclose(fp); 72 }