文本文件单词的检索与计数c语言,文本文件单词的检索与计数_课程设计.doc

《程序设计》课程设计

姓 名:

学 号:

班 级:软件

指导教师:

成 绩:

2013年6月

设计题目一

文本文件单词的检索与计数

1.1【问题描述】

设计C或C++程序,统计在这样的英文文本文件中,出现了多少个单词,每个单词出现了几次。连续的英文字符都认为单词(不包括数字),单词之间用空格或标点符号分隔。

1.2【设计需求及分析】

要统计英文文本文件中出现了哪些单词,就要从文件中读取字符,读取出来的连续英文字符认为是一个单词,遇空格或标点符号单词结束。

使用线性表记录单词以及每个单词出现的次数。线性表中的单词按字典顺序存储。

线性表的顺序存储结构如下:

#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量

#define LISTINCREMENT 10 //线性表存储空间的分配增量

typedef struct{

char word[21] //存储单词,不超过20个字符

int count; //单词出现的次数

} ElemType;

typedef struct{

ElemType *elem; //存储空间基址

int length; //当前长度

int listsize; //当前分配的存储容量

} Sqlist;

1.3【设计功能的实现】(用C或C++语言描述)

#include

#include

#include

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

typedef struct{

char word[21];

int count;

} ElemType;

typedef struct{

ElemType *elem;

int length;

int listsize;

} SqList;

int InitList(SqList *p){

p->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(p->elem==NULL) return 0;

p->length=0;

p->listsize=LIST_INIT_SIZE;

return 1;

}

int LocateElem(SqList *p,char *word)

{

int low,high,mid;

low=0;high=p->length-1;

while(low<=high)

{

mid=(low+high)/2;

if(strcmp(word,p->elem[mid].word)==0) //表中进行二分查找

{

p->elem[mid].count++;

return 0;

}

else if(strcmp(word,p->elem[mid].word)<0)

high=mid-1;

else

low=mid+1;

}

return low+1; //返回插入点序号

}

int InsertList(SqList *p,int i,char *word)

{

int j;

ElemType *base;

if(p->length>=p->listsize)

{

base=(ElemType*)realloc(p->elem,(p->listsize+LISTINCREMENT)*sizeof(ElemType));

if(base==NULL) return 0;

p->listsize=p->listsize+LISTINCREMENT; //扩充表长

p->elem=base;

}

for(j=p->length;j>=i;j--)

p->elem[j]=p->elem[j-1];

strcpy(p->elem[i-1].word,word);

p->elem[i-1].count=1;

p->length++;

return 1;

}

void PrintList(SqList *p,int num)

{

FILE *fw;

int i;

int no=num;

fw=fopen("D:\\单词计数.txt","w");

fprintf(fw,"该文章共有 %d 个单词\n以下按字母顺序来显示每个单词出现的次数\n******************************************\n",no);

fprintf(fw,"单词

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值