資源簡介
讀入文本集,建立倒排索引,內(nèi)含有的TXT文本可以替換,源代碼可以直接運行

代碼片段和文件信息
#include
#include
#include
#include
using?namespace?std;
class?node
{
friend?class?suoyin;
public:
char?*?name;
node?*?next;
bool?d1; //記錄name是否在第一個文檔中
bool?d2; //記錄name是否在第二個文檔中
node(){d1=false;d2=false;}; //初始化??設(shè)為不存在
node(char?*?a); //初始化,將外部字符串設(shè)為name
};
node::node(char?*?a)
{//初始化,將外部字符串設(shè)為name
name?=?new?char?[];
name?=?a;
}
class?suoyin
{//倒排索引類
public:
node?*?root?;//記錄根節(jié)點,創(chuàng)建鏈表記錄倒排索引
suoyin(){root?=?NULL;}//初始化?root
suoyin?&?addnode(int?knode?&?a);//將外部節(jié)點加入倒排索引
suoyin?&?delenode();//刪除重復名字的節(jié)點,并且將記錄表合并
int?*?find(char?*?x);//按名字查找記錄,并且返回記錄表(為一個int數(shù)組)
void?output1();//打印在屏幕上
void?output2();//打印在“il.txt“中
};
suoyin?&?suoyin::addnode(int?knode?&?a)
{//將外部節(jié)點加入倒排索引
node?*?p=root;
for(int?i=1;i p=p->next;//尋找到最后一個節(jié)點
node?*?y?=new?node;//新建節(jié)點y作為橋梁,將新節(jié)點加入
y->name=a.name;
y->d1=a.d1;
y->d2=a.d2;
if(k!=0)//加入的不是首節(jié)點
{
y->next=p->next;
p->next=y;
}
if(k==0)//加入的是首節(jié)點
{
y->next=root;
root=y;
}
return?*?this;//返回新的倒排索引
}
suoyin?&?suoyin::delenode()
{//刪除重復名字的節(jié)點,并且將記錄表合并
node?*?p?=?root;
while?(p->next)//遍歷倒排索引
{
if?(!strcmp(p->next->namep->name))//當名字相同時
{//合并記錄表,并將第二個節(jié)點刪除
p->d1=p->d1+p->next->d1;
p->d2=p->d2+p->next->d2;
p->next=p->next->next;
}
else?p=p->next;//名字不同時,放過
}
return?*?this;//返回新的倒排索引
}
int?*?suoyin::find(char?*?a)
{//按名字查找記錄,并且返回記錄表(為一個int數(shù)組)
int?results[2];//記錄查詢結(jié)果
results[0]=-1;//先初始化為-1
results[1]=-1;
node?*?current=root;
while(strcmp(current->namea)!=0)
{
current=current->next;
}
if(current)//找到對應(yīng)的名字
{//返回相應(yīng)的記錄表
results[0]=current->d1;
results[1]=current->d2;
return?results;
}
return?results;?//沒找到對應(yīng)的名字,返回值為-1的記錄表
}
void?suoyin::output1()
{//打印在屏幕上
node?*?current;
for(current=root;current;current=current->next)
{
int?fre=current->d1+current->d2;
cout<name<<“?fre:“< if(current->d1)?cout<<“?->1“;
if(current->d2)?cout<<“?->2“;
cout< }
}
void?suoyin::output2()
{//打印在“il.txt“中
ofstream?fout1(“il.txt“);
node?*?current;
for(current=root;current;current=current->next)
{
int?fre=current->d1+current->d2;
fout1<name<<“?fre:“< if(current->d1)?fout1<<“?->1“;
if(current->d2)?fout1<<“?->2“;
fout1< }
fout1.close();
}
void?change?(node?&?xnode?&?y)
{//外部函數(shù),按名字排列時,交換兩個詞項的順序
char?*?temp=new?char?[strlen(x.name)+1];//交換名字
strcpy(tempx.name);
strcpy(x.namey.name);
strcpy(y.nametemp);
bool?dtemp=x.d1;//交換記錄表
x.d1=y.d1;
y.d1=dtemp;
bool?ddtemp=0;
ddtemp=x.d2;
x.d2=y.d2;
y.d2=ddtemp;
};
void?copy(char?*?achar?*?bint?iint?j)
{//外部函數(shù),將a字符串的第i位到第j位復制到b字符串中,處理布爾查詢表達式時用
int?count;
for(count=0;count {
b[count]=a[i+count];
}
b[count]=‘\0‘;
};
int?main()
{
char?a[80][80];//二維數(shù)組存放初始詞項
ifstream?fin1(“1.txt“);
ifstre
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????????75??2013-09-24?21:35??1.txt
?????文件??????????80??2013-09-24?21:35??2.txt
?????文件????????7061??2013-10-09?14:45??dd.cpp
?????文件?????????566??2013-10-09?14:44??il.txt
評論
共有 條評論