![]() |
#2
lucky5635912011-11-23 09:30
|
我的思路是将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;
}
#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;
}