?? 搜索引擎.cpp
字號(hào):
#include <iostream> //老師寫的 但還為成功
#include <string>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
vector<string> key;
vector<string>::iterator it;
struct p
{
int c;
string key[250];
int k;
};
p search[50];
string text[250];
bool search_string(p s,string t)
{
int dis=s.c,i,j;
int v1=0;
int v2=0;
bool flag=false;
for(i=0;i<s.k-1;i++)
{
for(j=i+1;j<s.k;j++)
{
v1=v2=0;
char *str1=new char[s.key[i].length()];
for(int vv=0;vv<s.key[i].length()-1;vv++)
str1[vv]=s.key[i][vv];
str1[vv]='\0';
while(v1=t.find(str1,v1),v1!=-1)
{
v2=0;
char *str2=new char[s.key[j].length()];
for(int vvv=0;vvv<s.key[j].length()-1;vvv++)
str2[vvv]=s.key[j][vvv];
str2[vvv]='\0';
while(v2=t.find(str2,v2),v2!=-1)
{
cout<<v2<<","<<v1<<","<<dis<<","<<s.key[i].length()<<","<<s.key[j].length()<<endl;
if((v2>v1)&&((s.key[i].length()+dis)>=(v2-v1)))
{
flag=true;
break;
}
if((v2<v1)&&(s.key[j].length()+dis)>=(v1-v2))
{
flag=true;
break;
}
v2+=s.key[j].length();
}
if(flag==true)
break;
v1+=s.key[i].length();
delete []str2;
str2=NULL;
}
delete []str1;
str1=NULL;
if(flag==true)
break;
}
if(flag==true)
{
break;
}
}
return flag;
}
int main()
{
int s=0,t=0,i,j,len,vxd=0;
string begin,str,ss;
char str1[80];
bool f;
while(cin>>begin,begin[0]!='#')//輸入字符串,讀兩個(gè)字符,判斷是否為P或T,分別對(duì)待
{
if(begin[0]=='P')
{
for(i=0;i<80;i++)
str1[i]=' ';
cin>>search[s].c;//搜索語句中長度
gets(str1); //搜索關(guān)鍵字全部讀入
len=0;
f=false;
str="";
for(i=0;i<80;i++)
{
if(str1[i]!=' ')
{
str+=str1[i];
f=true;
}
else if(f)
{
if(int vxt=str.find(' ',0)) //測(cè)試一下
cout<<vxt;
search[s].key[len]=str; //關(guān)鍵字保存
key.push_back(str);
str="";
len++;
f=false;
}
}
if(f)
{
search[s].key[len]=str;
key.push_back(str);
}
str="";
search[s].k=len;
s++;
}
if(begin[0]=='T') //文本輸入
{
do
{
cin>>str;
ss="";
for(i=0;i<str.length();i++)
{
if(str[i]<='z'&&str[i]>='a') //大小寫切換 忽略非字母字符
ss+=str[i];
if(str[i]<='Z'&&str[i]>='A')
ss+=(str[i]+'a'-'A');
}
bool flag1=false;
for(it=key.begin();it!=key.end();it++)
{
if(ss.find(*it)!=-1)
{
flag1=true;
break;
}
}
if(flag1)
{
text[t]+=ss; //關(guān)鍵字留下
}
else
text[t]+="1"; //非關(guān)鍵字轉(zhuǎn)換為單一字符‘1’
if(str.find('|',0)!=-1) //文本結(jié)束符號(hào)
break;
}while(1);
t++;
}
}
int *result=new int[t];
for(i=0;i<s;i++)
{
int cx=0;
cout<<i+1<<": ";
for(j=0;j<t;j++)
{
if(search_string(search[i],text[j]))
result[cx++]=j+1;
}
for(j=0;j<cx-1;j++)
cout<<result[j]<<",";
if(cx!=0)
cout<<result[cx-1];
cout<<endl;
}
return 0;
}
/* 這個(gè)應(yīng)該可以提交
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int main()
{
int s=0,t=0,i,len,vxd=0;
string begin,str,ss;
char str1[80];
bool f;
while(cin>>begin,begin[0]!='#')//輸入字符串,讀兩個(gè)字符,判斷是否為P或T,分別對(duì)待
{
if(begin[0]=='P')//搜索字句測(cè)試
{
for(i=0;i<80;i++)
str1[i]=' ';
cin>>vxd;
cout<<vxd<<endl; //**************測(cè)試 搜索語句中長度
gets(str1);
cout<<str1<<endl;//**************測(cè)試 搜索關(guān)鍵字全部讀入
len=0;
f=false;
str="";
for(i=0;i<80;i++)
{
if(str1[i]!=' ')
{
str+=str1[i];
f=true;
}
else if(f)
{
cout<<str<<endl; //**************測(cè)試 關(guān)鍵字保存
str="";
len++;
f=false;
}
}
if(f)
{
cout<<str<<endl;// **************測(cè)試 有可能關(guān)鍵字不以空格結(jié)束
}
str="";
s++;
}
if(begin[0]=='T') //文本輸入
{
do
{
cin>>str;
ss="";
for(i=0;i<str.length();i++)
{
if(str[i]<='z'&&str[i]>='a') //大小寫切換 忽略非字母字符
ss+=str[i];
if(str[i]<='Z'&&str[i]>='A')
ss+=(str[i]+'a'-'A');
}
cout<<ss<<endl;//**************測(cè)試 文本輸入
if(str.find('|',0)!=-1) //文本結(jié)束符號(hào)
break;
}while(1);
t++;
}
}
return 0;
#include <iostream>
#include <string>
using namespace std;
string ky[100];
struct sch
{
int len;
int keyword;
int m[20];
};
string tt[250];
sch p[50];
bool xs(sch s,string t)
{
int dis=s.len,i,j;
int v1=0;
int v2=0;
string str1,str2;
bool flag=false;
for(i=0;i<s.keyword-1;i++)
{
for(j=i+1;j<s.keyword;j++)
{
str1=ky[s.m[i]-1];
str2=ky[s.m[j]-1];
v1=v2=0;
while(v1=t.find(str1,v1),v1!=-1)
{
v2=0;
while(v2=t.find(str2,v2),v2!=-1)
{
if((v2>v1)&&((str1.length()+dis)>=(v2-v1)))
{
flag=true;
break;
}
if((v2<v1)&&(str2.length()+dis)>=(v1-v2))
{
flag=true;
break;
}
v2+=str2.length();
}
if(flag==true)
break;
v1+=str1.length();
}
if(flag==true)
break;
}
if(flag==true)
{
break;
}
}
return flag;
}
int main()
{
int s=0,t=0,i,j,v=0,k,c;
string begin,str,ss;
char str1[200];
bool f;
while(cin>>begin,begin.size()>0&&begin[0]!='#')
{
if(begin[0]=='P')
{
c=0;
for(i=0;i<200;i++)
str1[i]=' ';
cin>>p[s].len;
gets(str1);
str="";
f=false;
for(i=0;i<strlen(str1);i++)
{
if(str1[i]!=' '&&str1[i]!='\0')
{
str+=str1[i];
f=true;
}
else if(f)
{
for(j=0;j<v;j++)
{
if(ky[j]==str)
{
f=false;
p[s].m[c++]=j+1;
str="";
}
}
if(f)
{
ky[v++]=str;
p[s].m[c++]=v;
str="";
}
f=false;
}
}
if(f)
{
for(j=0;j<v;j++)
{
if(ky[j]==str)
{
f=false;
p[s].m[c++]=j+1;
str="";
}
}
if(f)
{
ky[v++]=str;
p[s].m[c++]=v;
str="";
}
}
p[s].keyword=c;
s++;
}
if(begin[0]=='T')
{
do
{
cin>>str;
ss="";
f=false;
for(i=0;i<str.length();i++)
{
if(str[i]<='z'&&str[i]>='a')
ss+=str[i];
if(str[i]<='Z'&&str[i]>='A')
ss+=(str[i]+'a'-'A');
}
for(i=0;i<v;i++)
{
if(ss==ky[i])
{
f=true;
break;
}
}
if(f)
tt[t]+=ss;
else if(ss.length()>0)
tt[t]+="0";
if(str.find('|',0)!=-1)
break;
}while(1);
t++;
}
}
int *result=new int[t];
for(i=0;i<s;i++)
{
int cx=0;
cout<<i+1<<": ";
for(j=0;j<t;j++)
{
if(xs(p[i],tt[j]))
result[cx++]=j+1;
}
for(k=0;k<cx-1;k++)
cout<<result[k]<<",";
if(cx!=0)
cout<<result[cx-1];
cout<<endl;
}
return 0;
}
易老師(330412055) 19:03:31
必須保證搜索語句比文本先輸入
}*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -