wordin
001 dats struct
002 alogthrim and data struct
003 C language programing
004 the art of programing
005 data dimming
006 JAVA_EE programing
007 princple of database
008 princple of operating system
009 alogrithm design and analysis
010 Software Engineering
011 Software Engineering Stream
wordout
The idxlist is:
C 003
Engineering 010 011
JAVA_EE 006
Software 010 011
Stream 011
alogrithm 009
alogthrim 002
analysis 009
and 002 009
art 004
data 002 005
database 007
dats 001
design 009
dimming 005
language 003
of 004 007 008
operating 008
princple 007 008
programing 003 004 006
struct 001 002
system 008
the 004
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ERROR -1
#define OK 1
#define BUFFSIZE 2048
typedef struct node{
char a[80];//存储书号
struct node *next;//指向下一个结点的指针
}Lnode, *linklist;//存储书号的链表
typedef struct {
char *ch;
int length;//字符个数
} heapstring;//字符串的堆方式定义
typedef struct {
char item[100][80];//定义一个字符数组存储各个单词
int last;//单词的个数
}wordlisttype;//单词列表
typedef struct{
heapstring key;//以堆方式存放的关键字
linklist bnolist;//书号链表
}idxtermtype;//关键字元素
typedef struct{
idxtermtype item[1000];//关键字数组
int last; //关键字的个数
}idxlisttype;//关键字倒排表
typedef int status;
status init(heapstring &t)//初始化堆字符串
{
t.ch=(char *)malloc(sizeof(char));
return 1;
}
status strassign(heapstring &t,char *chars)//将字符串存放到堆方式表示的字符串中
{
int len,j;
init(t);
if(t.ch) free(t.ch);
len=strlen(chars);
if(chars[len-1]==10) len=len-1;//去掉从文件中读入一行字符的换行标记(其ASCII为10),此标记不存入字符串中
if(!len) {t.ch=NULL;t.length =0;}
else
if(!(t.ch=(char *)malloc(len*sizeof(char))))
return ERROR;
else
{
for (j=0;j<len;j++) t.ch[j]=chars[j];
t.length =len;
}
return OK;
}
void outputstring(heapstring t)//输出以堆方式表示的字符串
{
int i;
for (i=0;i<t.length ;i++)
printf("%c",t.ch[i]);
}
status extractword(heapstring t,wordlisttype &wd)// 从字符串堆t中分离出单词符号存放到单词表wd中
{
int num=0,i=0,len=t.length,label=-1,j=0 ;
char p,q;
i=0;num=0;
p=' ';q=t.ch[i];
while(i<len)
{
if(p==' '&&q!=' ')//p,q为两相邻字符,空格+非空格表示一个单词的开始,label=1
{
num++;label=1;j=0;//num为单词的个数
}
else if(p!=' '&&q==' ') label=0;//p,q为两相邻字符,非空格+空格表示一个单词的结束,label=0
if(label==1) //wd.item[num-1][j++]=q;//存储单词的字符
{
if(q>='0' && q<='9')
wd.item[num-1][j++]=q;
else if (q>='A' && q<='Z')
wd.item[num-1][j++]=q+32;
else
wd.item[num-1][j++]=q;
}
else if(label==0) wd.item[num-1][j++]='