已结贴√
问题点数:40 回复次数:20
统计一个文本文件中的单词个数和汉字个数
统计一个文本文件中的单词个数和汉字个数
我在word里面输入了一段中文,一段英文 看它统计的数据(比如单词99 ,汉字99)
然后用一下程序实现统计,发现代码实现的统计数目均会多一个(如 单词100 ,汉字100)
这个问题怎么解决呢? 代码有点长。。。
环境:xp系统
软件:Microsoft Visual C++ 2008
语言:C
#include
#include
#include
int readData(char filename[]);
void writeData(int n , int x);
int hanzi(char filename[]);
int main(void)
{
char name[40] = "e:\\abc2.txt";
int word_num;
int hanzi_num;
word_num = readData(name);
hanzi_num = hanzi(name) ;
writeData(word_num, hanzi_num);
return 0;
}
int readData(char filename[]) //此函数计算英文单词个数
{
FILE* fp;
char ch;
char flag = 0;
int num=0;
if((fp = fopen(filename,"r")) == NULL)
{
printf("%s open failure",filename);
exit(EXIT_FAILURE);
}
printf("%s open sucessfully!~\n",filename);
while(!feof(fp))
{
ch = fgetc(fp);
//(ch < 0x80) 排除汉字的干扰
if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
flag = 0;
else if(flag == 0 && (ch != '-' && ch != '/'&& ch != '\''))
{
num++;
flag = 1;
}
}
fclose(fp);
return num;
}
int hanzi(char filename[]) //此文件计算汉字个数
{
FILE* fp;
int ch; //注意这里是int型的
int count = 0;
if((fp = fopen(filename,"r")) == NULL)
{
printf("%s open failure.\n",filename);
exit(EXIT_FAILURE);
}
while(!feof(fp))
{
ch = fgetc(fp);
if(ch == -1)
break;
if(ch >= 0x80)
{
count++;
ch = fgetc(fp);//为什么要再来一次? 哦 因为fgetc每次只能取到一个字节 汉字是两个字节(可能是为了废掉一个字节)
}
}
fclose(fp);
return count;
}
void writeData(int n,int x) //此文件输出
{
FILE* fp;
if((fp = fopen("D:\\result.txt","a")) == NULL)
{
printf("File open failure!!!");
exit(EXIT_FAILURE);
}
fprintf(fp,"文件中的单词个数为%d\n",n);
fprintf(fp,"文件中的汉字个数为%d\n",x);
printf("文件中的单词个数为%d\n",n);
printf("文件中的汉字个数为%d\n",x);
printf("结果保存在D:\\result.txt当中\n");
fclose(fp);
}