[工学]太原理工大学《程序设计》课程设计
《程序设计》课程设计 姓 名:郭雨晴 学 号: 班 级:软件1003班 指导教师:呼克佑、李誌 成 绩: 2012年6月 设计题目一 1. 文本文件单词的检索与计数 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(lowelem[mid].word)==0) //表中进行二分查找 { p->elem[mid].count++; return 0; } else if(strcmp(word,p->elem[mid].word)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=(“F:\\单词计数.txt“,“w“); fprintf(fw,“文章共有%d个单词\n以下按字典顺序排序显示出现次数\n******************************************\n“,no); fprintf(fw,“单词 出现次数\n“,no); for(i=0;ilength;i++) fprintf(fw,“%-24s %-5d\n“,p->elem[i].word,p->elem[i].count); fprintf(fw,“******************************************\n“); fclose(fw); } //主函数 void main() { SqList L; char word[21],ch,filename[30],filename1[50]; int num=0,i,j=0,mark=0; FILE *fp; InitList( printf(“请将文件放入F盘,并输入文件名:\n“); scanf(“%s“, sprintf(filename1,“F:\\%s.txt“,filename); getchar(); if((fp=(filename1,“r“))==NULL) { printf(“打开文件失败,请确认文件名与文件路径!\n“); getchar(); exit(0); } ch=fgetc(fp); while(ch!=EOF) { if((ch>= A } num++; word[j]= \0 ; mark=0; j=0; i=LocateElem( if(i>0) InsertList( } } ch=fgetc(fp);