资源简介
内容
(1)从文件中读出一篇英文文章,将不同的单词存入堆中,建立相应的索引表确定各单词在堆中存储的位置及出现的次数。
(2)按单词出现的频率递减的次序输出。
代码片段和文件信息
#include
#include
#include
#define MaxSize 100
#define MaxLen 20
#define MaxWord 10
typedef struct
{ char data[MaxLen];
int len;
}SqString;//单词读取
typedef struct
{
int addr;
int len;
int fre;//存储频度
}idxtem;//索引表
typedef struct
{
char space[MaxSize];
int free;
idxtem item[MaxWord];
int last;
}idxlist;//堆
void init(idxlist *&List)
{
List=(idxlist *)malloc(sizeof(idxlist));
List->free=0;
List->last=-1;
}
void create_sq(SqString &strFILE *fp1)//单个单词
{
str.len=0;
int i=0;
char ch;
while(!feof(fp1))//判断文件是否结束
{
ch=fgetc(fp1);//用fgetc函数从文件读入一个字符
if(((ch<‘A‘)||(ch>‘Z‘))&&((ch<‘a‘)||(ch>‘z‘)))
break;
str.data[i]=ch;
str.len++;
i++;
}
}
void create(idxlist *List)
{ idxtem q;
SqString str;
int igjmk1k2;
FILE *fp1=fopen(“E:\\2.txt““r+“);//文件指针名=fopen(文件名,使用文件方式)
while(!feof(fp1))
{ k1=0k2=0;
create_sq(strfp1);
for(j=-1;j<=List->last;j++)
{
if(List->item[j].len==str.len)//先比较长度,长度与之前不同,入堆栈长度相同顺序比较字母
{
for(m=0;m {
if(List->space[List->item[j].addr+m]!=str.data[m])//有字母不同,入堆栈
{g=0;break;}
else
g=1;
}
评论
共有 条评论