求简化代码~~~~
这题是《算法竞赛入门经典》的第三章第二题:输入若干个单词,输出它们的平均长度。单词只包含大写字母和小写字母,用一个或多个空格隔开。我的思路是将in.txt里的内容用fgetc一个一个字符读取,然后判断是不是空格或者回车,再对单词和字母数目统计。但是我觉得我在判断空格的代码好像有点累赘,应该还可以用别的方法吧,我还有一个思路就是将所有空格先删除,返回每段空格的第一个空格的地址,再用其他符号代替。希望大家给点思路和意见,谢谢~
程序代码:
#include<stdio.h> #include <string.h> bool pause=0;//空格或者回车存在与否 int main() { FILE *fin,*fout; fin=fopen("in.txt","r"); fout=fopen("out.txt","w"); char put; char temp[256]={0};//判断上一个字符是否空格来计算有多少个单词 int i=0,sum=0,count_pause=1;//i为计数变量 double average,count=0; while((put=fgetc(fin))!=EOF) { if (put==' '||put=='\n') { temp[count_pause]=put; if (!pause) { sum=sum+i; i=0;//重置计数变量,找到空格就代表一个单词结束 pause=1; } if (temp[count_pause-1]==' '||temp[count_pause-1]=='\n') { //判断上一个字符是否空格,不是空格,单词数就加一 count_pause++; continue; } else { count++; count_pause++; } continue; } else { i++; pause=0;//因为没有空格等,所以变回没有空格 memset(temp,0,sizeof(temp)); } } average=(sum+=i)/count; fprintf(fout,"共有%.0lf个单词\n",count); fprintf(fout,"共有%d个字母\n",(sum+=i)); fprintf(fout,"单词平均长度为:%.2lf个字母",average); // fprintf(fout,"%d",count); fclose(fin); fclose(fout); return 0; }