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);
}

 

posted @ 2016-03-23 14:43  陈一鸣Leo  阅读(626)  评论(1编辑  收藏  举报