WordCount程序实现
程序功能:
统计出文件中文本的行数,每行字符数、单词数,文本空行数,文本总字符数、总单词数并显示。
使用方法:
1.在电脑中建立文本
2.打开源程序
3.输入文件名
4.查看显示结果
由于文本中存放的是代码,所以行数较多,最后可以看到总计的结果。
本程序的不足:
1.我使用的是C语言来编写的本程序,但是现在确定文本中中文单词的特征,因为中文单词和英文单词不同,中文单词不需要空格来分隔开,所以不好统计。
2.目前还是只能通过控制台来进行输入输出,目前正在自学JAVA语言,正在学习GUI的使用和设计,我将会对此程序进行修改,最终使其可以显示在更为美观的窗口下。
#include <stdio.h>
#include <stdlib.h>
void wordCount(char *fileName);
int main()
{
char fileName[50];
printf("\t\t\t*****************************************************************\n");
printf("\t\t\t*\t\t\t 欢 迎 使 用\t\t\t*\n");
printf("\t\t\t*****************************************************************\n");
printf("\t\t\t*\t\t\t请输入要打开的文件名:\t\t\t*\n");
gets(fileName);
FILE *fp;
if(fp=fopen(fileName,"r")==NULL)
{
printf("\t\t\t*\t\t\t 文件不存在\t\t\t *\n");
return 0;
}
printf("\t\t\t*****************************************************************\n");
wordCount(fileName);
fclose(fp);
printf("\t\t\t*****************************************************************\n");
printf("\t\t\t*\t\t\t 感 谢 使 用\t\t\t*\n\n\n");
return 0;
}
void wordCount(char *fileName){
int i;
int lineChar=0; //本行字符数
int lineWord=0; //本行单词数
int blankLine=0; //空行数
int noSignal=0; //判断是否为符号而不是字母
int charNum=0; //总字符数
int wordNum=0; //总单词数
int lineNum=0; //行数
char str[300]; //估计一行最多字符不会超过300个,所以将字符串区间定义为300
char ch;
FILE *fp;
fp=fopen(fileName,"r");
printf("\t\t\t*\t行数 \t本行字符数 \t本行单词数\t\t*\n");
while(fgets(str,300,fp)!=NULL) //读取一行字符串
{
for(i=0;i<strlen(str);i++)
{
ch=str[i];
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch=='.'))
{
!noSignal&&lineWord++; //当字母前是符号时,这是一个新单词的开始
!noSignal&&wordNum++;
noSignal=1; //当前字符不再是符号
}
else noSignal=0; //当前字符为符号
if(ch!='\n'&&ch!='\r')
{
charNum++; //字符统计
lineChar++;
}
}
lineNum++; //行数统计
if(lineChar<=1)
blankLine++; //空行统计
printf("\t\t\t*\t %d\t\t %d\t\t %d\t\t\t*\n",lineNum,lineChar,lineWord); //打印本行统计结果
noSignal=0; //本行统计结束,复位操作
lineChar=0;
lineWord=0;
}
printf("\t\t\t*总计:\t字符数:%d\t空行数:%d\t行数:%d\t单词数:%d\t*\n",charNum,blankLine,lineNum,wordNum);
}