我正在实现一个小型搜索引擎。信息取自一个文件并返回所有包含该单词的搜索。问题是当我在 while 循环中运行搜索功能时,出现分段错误错误但是当我运行它时没有while循环,它运行顺利..我已经重新检查了很多次代码,但找不到任何问题。任何帮助将不胜感激。
//searches individual words which are given to it.array has some data in it
int search_word(string word,string array)
{
int counter=0;
size_t found;
int i=0;
for (i=array.find(word,0);i!=string::npos;i=array.find(word,i))
{
counter+=1;
i++;
}
return counter;
}
//this is sorting(descending) the linked list of results and storing it in an array
void Rank()
{
struct results *go;
go=head;
int array[54];
int l=0;
while (go->next!=0)
{
array[l]=go->number;
array1[l]=go->result;
go=go->next;
++l;
}
array[l]=go->number;
array1[l]=go->result;
int temp;
string temp1;
for (int k=0;k<l;k++)
{
for (int j=(k+1);j<l+1;j++)
{
if (array[k]<array[j])
{
temp=array[k];
array[k]=array[j];
array[j]=temp;
temp1=array1[k];
array1[k]=array1[j];
array1[j]=temp1;
}
}
}
cout<<"Following results were found"<<endl;
for (int a=0;a<l;++a)
{
cout<<"Result no."<<a<<endl;
cout<<array1[a]<<endl;
cout<<endl;
}
}
//main search function
void search(string array[])
{
//words like the,a,he,they,would are low rank words
ifstream fin;
fin.open("lowRank.txt");
string lowrank;
int j=0;
while (!fin.eof())
{
string buffer;
do
{
getline(fin,buffer);
lowrank+=" ";
lowrank+=buffer;
++j;
}
while (!buffer.empty());
}
fin.close();
cout<<"Enter a word or phrase"<<endl;
//converting the string containing words into seperate strings by tockenisation
string setofwords[10];
char phrase[50];
cin.get(phrase,50);
int count=0;
char *pointer= NULL;
pointer=strtok(phrase," ");
while (pointer!=NULL)
{
char *pointer= NULL;
setofwords[count]=pointer;
pointer=strtok(NULL," ");
count+=1;
delete [] pointer;
}
for (int i=0;i<54;i++)
{
int counter=0;int counter1=0;
//searching for all words one by one in the below loop
for (int k=0;k<count;k++)
{
//searching if word is low rank
size_t found;
found=lowrank.find(setofwords[k]);
if (found!=string::npos)
{
counter=search_word(setofwords[k],array[i]);
if (counter>0)
{
counter1+=1;
}
}
else
{
counter=search_word(setofwords[k],array[i]);
counter1+=counter;
}
}
if (counter1>0)
{
add_result(array[i],counter1);
}
}
Rank();
}
int main()
{
//reading the data file and copying it into an a linked list
ifstream fin;
fin.open("data.txt");
while (!fin.eof())
{
string url;
string data;
getline(fin,url);
string buffer;
do
{
getline(fin,buffer);
if (!buffer.empty())
{
data=buffer;
}
}
while (!buffer.empty());
add_node(url,data);
}
//copying linked list to an array
string array[54];
node *conductor;
conductor=root;
for (int i=0;i<54;i++)
{
array[i]=conductor->url+conductor->data;
conductor=conductor->next;
}
fin.close();
while (1)
{
cout<<"*******************************SEARCH
ENGINE********************************"<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<"1.Press 1 to search a word."<<endl;
cout<<"5.Press 5 to quit without saving search results"<<endl;
int ans;
cin>>ans;
if (ans==1)
{
search(array);
search(array);
}
else if (ans==5)
{
quit_without_saving();
}
}
system("PAUSE");
return 0;
}