统计文件中单词的个数和最长词的长度
/*
已知正文有文件abc.txt,
1:统计该文件中词的个数,
2:并求出最长词的长度,
一个词与另外一个词之间由空格符,制表符,换行符分隔
*/
#include<stdio.h>
#include<process.h>
#include<string.h>
void main()
{
FILE *fp;
char ch;
int word=0,maxlen=0,length=0,flag=0; //word存放词的个数,maxlen存放最大词的长度,length存放当前词的长度,flag为状态标记,(1表示当前字符在单词中,0表示当前字符不再某词中)
if((fp=fopen("f:\\file.txt","r"))==NULL) //打开文件
{
printf("can not open the file!\n");
exit ;
}
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch=' '||ch='\t' || ch='\n') //判断单词的分隔,即此时单词结束
{
if(flag==1)
{
flag=0;
if(length>maxlen) maxlen=length;
}
}
else if(flag==0) //单词没有结束,还有字符呢,亲
{
flag=1;
length=1; //计数
word++;
}
else length++;
ch=fgetc(fp);
}
fclose(fp);
printf("word=%d,maxlen=%d\n",word,maxlen);
}
亲们,这算法哪点错误了,
[解决办法]
/*已知正文有文件abc.txt,1:统计该文件中词的个数,2:并求出最长词的长度,一个词与另外一个词之间由空格符,制表符,换行符分隔*/#include<stdio.h>#include<process.h>#include<string.h>void main(){ FILE *fp; char ch; int word=0,maxlen=0,length=0,flag=0; if((fp=fopen("f:\\file.txt","r"))==NULL) { printf("can not open the file!\n"); return;//这儿错了 } ch=fgetc(fp); while(ch!=EOF) { if(ch==' '||ch=='\t' || ch=='\n') //这儿错了,应该是双等号 { if(flag==1) { flag=0; if(length>maxlen) maxlen=length; } } else if(flag==0) //单词没有结束,还有字符呢,亲 { flag=1; length=1; //计数 word++; } else length++; ch=fgetc(fp); } fclose(fp); printf("word=%d,maxlen=%d\n",word,maxlen);}