软件工程作业单词统计

今天白天还没想好改怎么写我的代码 下午才想好该怎么写代码,最开始没有想用什么来存储单词,也可以叫字符串,最开始以为只是统计单词个数,就想简单的写点就行,用java俩行就可以解决了,后来想起来还要统计行数,才知道要用到文件,所以我的代码用C语言写的。感觉没有要求的东西最难办,哎..........

不管怎么样都得做。。。。

需求分析:1.统计行数

              2.统计单词个数。但是没有排序。

我的代码有待改进,本来是昨天晚上交作业前写的,我今天晚上改进后提交,我以为只是单词统计而已,我今天晚上改进后提交。

以下是我的代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define MAX     1000
typedef struct word
{
    char str[30];//二维数组用来储存单词
    int count_word;//记录单词个数
    int flag;//标志是否被去掉了
}Word[MAX];
char str[200];
Word coculate_word;//全局变量存储单词的
void Count_C();//统计行数函数
void Count_W();//统计单词的
void print();//打印界面
int main(){
   int select;//选项
   while(1)
   {
       print();
       scanf("%d",&select);
       switch(select)
       {
           case 1:Count_C();break;
           case 2:Count_W();break;
           case 3:exit(0);
       }
       printf("\n\n\n\n\n");
   }
}
void print()//dos用户界面
{
    printf("*********************************************\n");
    printf("**********欢迎进入单词统计系统***************\n");
    printf("**********1.统计行数*************************\n");
    printf("**********2.统计单词个数*********************\n");
    printf("**********3.退出*****************************\n");
    printf("**********请选择:");
}
void Count_C()//读文件统计行数
{
    FILE* fp;
    int count_c;//行数
    fp=fopen("word.txt","r+");//打开文件
    if(fp==NULL)
    {
        printf("文件打开失败\n");
        exit(0);
    }
    count_c=0;
    while(fgets(str,MAX,fp)!=NULL)//按照行读取文件并判断是否读到文件尾
    {
        count_c++;//记录行数
    }
    printf("文本的行数为%d\n",count_c);
    fclose(fp);//关闭文件
}
void Count_W()//统计单词函数
{
    FILE* fp;
    int i;
    int k;
    fp=fopen("word.txt","r+");//打开文件
    if(fp==NULL)
    {
        printf("文件打开失败\n");
        exit(0);
    }
    for(i=0;i<MAX;i++)//初始化单词数以及标志变量
    {
        coculate_word[i].count_word=1;
        coculate_word[i].flag=1;
    }
    i=0;
    while(!feof(fp))//读取每个单词并存储
    {
        fscanf(fp,"%s",coculate_word[i].str);
        strlwr(coculate_word[i].str);//将单词的所有大些字母转换成小写字母
        i++;
    }

    k=i;//文件中单词的个数
    for(i=0;i<k;i++)//该循环用来统计单词个数的
    {
        if(coculate_word[i].flag==0)
        {
            continue;
        }
        coculate_word[i].flag=0;
        for(int j=1;j<k;j++)
        {
            if(coculate_word[j].flag==0)
            {
                continue;
            }
            if(strcmp(coculate_word[i].str,coculate_word[j].str)==0)
            {
                coculate_word[i].count_word++;
                coculate_word[j].count_word=0;
                coculate_word[j].flag=0;

            }
        }
    }
    printf("************统计结果**************\n");
    for(i=0;i<k;i++)
    {
        if(coculate_word[i].count_word!=0)//去掉同样的单词并将单词打印出以及该单词的个数
        {
            printf("单词%s\t个数%d\n",coculate_word[i].str,coculate_word[i].count_word);
        }
    }


}


下面是运行结果的截图

 

posted @ 2016-03-23 21:22  =liuchang=  阅读(329)  评论(1编辑  收藏  举报