60
#include<bits/stdc++.h>
using namespace std;
int n,m;
char p[110][110];
char quest[110];
int Correct(char * a, char * pp){
char p[110];
int ppos=0;
for( ppos=0;pp[ppos]!='\0';ppos++){
p[ppos]=pp[ppos];
}
p[ppos]='\0';
//保存参数以免被更改
char* pattern=strtok(p," ");
string Pattern(pattern);
char* name=strtok(NULL," ");
//p已被更改
string Name(name);
string Aa(a);
vector <string> Pt,A;
if( Pattern.find("<path>")!=string::npos ){//有路径的,最后没有斜杠
if(Aa[Aa.length()-1]=='/')return 0;//最后一个是斜杠,证明非路径,不匹配
char * temp0= (char*)Pattern.c_str();
char* temp=strtok(temp0,"/");
string Temp(temp);
Pt.push_back(Temp);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
Pt.push_back(Temp1);
}
//处理模式串,结果保存在Pt中
temp0= (char*)Aa.c_str();
temp=strtok(temp0,"/");
string Temp3(temp);
A.push_back(Temp3);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
A.push_back(Temp1);
}
//处理查询串,结果保存在A中
for(int i=0;i<Pt.size();i++){
if(Pt[i].compare(A[i])==0){
continue;
}
else{
if(i==(Pt.size()-1)){
cout<<Name<<" ";
cout<<A[i];
for(int j=i+1;j<A.size();j++)
cout<<"/"<<A[j];
return 1;
}
else{
return 0;
}
}
}
}
else if( Pattern.find("<")==string::npos ){//没有正则的,直接匹配
if( Pattern.compare(Aa)==0 ){
cout<<Name<<endl;
return 1;
}
else return 0;
}
else{//int 和str匹配
char * temp0= (char*)Pattern.c_str();
char* temp=strtok(temp0,"/");
string Temp(temp);
Pt.push_back(Temp);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
Pt.push_back(Temp1);
}
//处理模式串,结果保存在Pt中
temp0= (char*)Aa.c_str();
temp=strtok(temp0,"/");
string Temp3(temp);
A.push_back(Temp3);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
A.push_back(Temp1);
}
//处理查询串,结果保存在A中
if(Pt.size()!=A.size())
return 0;
vector <int> Int;
for(int i=0;i<Pt.size();i++){
if(Pt[i].find("<")==string::npos){//直接匹配的字符
if(Pt[i].compare(A[i])!=0){
return 0;
}
else {
continue;
}
}
else{
if(Pt[i].compare("<int>")==0){
int inttemp=0;
for(int nt=0;nt<A[i].length();nt++){
if(A[i][nt]>='0'&&A[i][nt]<='9'){
inttemp*=10;
inttemp+=A[i][nt]-'0';
}
else{
return 0;
}
}
Int.push_back(inttemp);
}
else{
continue;
}
}
}
cout<<Name<<" ";
int num=0;
for(int i=0;i<Pt.size();i++){
if(Pt[i].compare("<int>")==0){
cout<<" "<<Int[num++];
continue;
}
if(Pt[i].compare("<str>")==0){
cout<<" "<<A[i];
continue;
}
}
cout<<endl;
return 1;
}
//无匹配
return 0;
}
void Query(char *a){
int sum=0;
for(int i=0;i<n;i++){
sum+=Correct(a,p[i]);
}
if(sum==0)
cout<<"404"<<endl;
return ;
}
int main(){
cin>>n>>m;
char ctemp;
cin.get(ctemp);
char intemp[110];
for(int i=0;i<n;i++){
cin.getline(p[i],110);
}
for(int i=0;i<m;i++){
cin.getline(quest,110);
Query(quest);
}
return 0;
}
90 只匹配第一个就可以,不用输出全部
#include<bits/stdc++.h>
using namespace std;
int n,m;
char p[110][110];
char quest[110];
int Correct(char * a, char * pp){
char p[110];
int ppos=0;
for( ppos=0;pp[ppos]!='\0';ppos++){
p[ppos]=pp[ppos];
}
p[ppos]='\0';
//保存参数以免被更改
char* pattern=strtok(p," ");
string Pattern(pattern);
char* name=strtok(NULL," ");
//p已被更改
string Name(name);
string Aa(a);
vector <string> Pt,A;
if(Pattern[Pattern.length()-1]=='/'&&Aa[Aa.length()-1]!='/'||Pattern[Pattern.length()-1]!='/'&&Aa[Aa.length()-1]=='/')
return 0;
/*
if( Pattern.find("<path>")!=string::npos ){//有路径的,最后没有斜杠
//if(Aa[Aa.length()-1]=='/')return 0;//最后一个是斜杠,证明非路径,不匹配
char * temp0= (char*)Pattern.c_str();
char* temp=strtok(temp0,"/");
string Temp(temp);
Pt.push_back(Temp);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
Pt.push_back(Temp1);
}
//处理模式串,结果保存在Pt中
temp0= (char*)Aa.c_str();
temp=strtok(temp0,"/");
string Temp3(temp);
A.push_back(Temp3);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
A.push_back(Temp1);
}
//处理查询串,结果保存在A中
for(int i=0;i<Pt.size();i++){
if(Pt[i].compare(A[i])==0){
continue;
}
else{
if(i==(Pt.size()-1)){
cout<<Name<<" ";
cout<<A[i];
for(int j=i+1;j<A.size();j++)
cout<<"/"<<A[j];
return 1;
}
else{
return 0;
}
}
}
}
*/
if( Pattern.find("<")==string::npos ){//没有正则的,直接匹配
if( Pattern.compare(Aa)==0 ){
cout<<Name<<endl;
return 1;
}
else return 0;
}
else{//int 和str匹配
char * temp0= (char*)Pattern.c_str();
char* temp=strtok(temp0,"/");
string Temp(temp);
Pt.push_back(Temp);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
Pt.push_back(Temp1);
}
//处理模式串,结果保存在Pt中
temp0= (char*)Aa.c_str();
temp=strtok(temp0,"/");
string Temp3(temp);
A.push_back(Temp3);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
A.push_back(Temp1);
}
//处理查询串,结果保存在A中
if((Pattern.find("<path>")==string::npos)&&(Pt.size()!=A.size()))
return 0;
vector <int> Int;
for(int i=0;i<Pt.size();i++){
if(Pt[i].find("<")==string::npos){//直接匹配的字符
if(Pt[i].compare(A[i])!=0){
return 0;
}
else {
continue;
}
}
else{
if(Pt[i].compare("<int>")==0){
int inttemp=0;
for(int nt=0;nt<A[i].length();nt++){
if(A[i][nt]>='0'&&A[i][nt]<='9'){
inttemp*=10;
inttemp+=A[i][nt]-'0';
}
else{
return 0;
}
}
Int.push_back(inttemp);
}
else if(Pt[i].compare("<str>")==0){
continue;
}
else if(Pt[i].compare("<path>")==0){
break;
}
else{
}
}
}
cout<<Name<<" ";
int num=0;
for(int i=0;i<Pt.size();i++){
if(Pt[i].compare("<int>")==0){
cout<<" "<<Int[num++];
continue;
}
if(Pt[i].compare("<str>")==0){
cout<<" "<<A[i];
continue;
}
if(Pt[i].compare("<path>")==0){
cout<<A[i];
for(int j=i+1;j<A.size();j++)
cout<<"/"<<A[j];
cout<<endl;
return 1;
}
}
cout<<endl;
return 1;
}
//无匹配
return 0;
}
void Query(char *a){
int sum=0;
for(int i=0;i<n;i++){
sum+=Correct(a,p[i]);
if(sum!=0)
break;
}
if(sum==0)
cout<<"404"<<endl;
return ;
}
int main(){
cin>>n>>m;
char ctemp;
cin.get(ctemp);
char intemp[110];
for(int i=0;i<n;i++){
cin.getline(p[i],110);
}
for(int i=0;i<m;i++){
cin.getline(quest,110);
Query(quest);
}
return 0;
}
90 结尾斜杠的处理
#include<bits/stdc++.h>
using namespace std;
int n,m;
char p[110][110];
char quest[110];
int Correct(char * aa, char * pp){
char p[110];
int ppos=0;
for( ppos=0;pp[ppos]!='\0';ppos++){
p[ppos]=pp[ppos];
}
p[ppos]='\0';
//保存参数以免被更改
char a[110];
for( ppos=0;aa[ppos]!='\0';ppos++){
a[ppos]=aa[ppos];
}
a[ppos]='\0';
char* pattern=strtok(p," ");
string Pattern(pattern);
char* name=strtok(NULL," ");
//p已被更改
string Name(name);
string Aa(aa);
vector <string> Pt,A;
if(Aa[Aa.length()-1]=='/'){
if(Pattern[Pattern.length()-1]=='/'||Pattern[Pattern.length()-1]=='>'&&Pattern[Pattern.length()-2]=='h')
{
}
else{
return 0;
}
}
else{
if(Pattern[Pattern.length()-1]!='/'||Pattern[Pattern.length()-1]=='>'&&Pattern[Pattern.length()-2]=='h')
{
}
else{
return 0;
}
}
/*
if( Pattern.find("<path>")!=string::npos ){//有路径的,最后没有斜杠
//if(Aa[Aa.length()-1]=='/')return 0;//最后一个是斜杠,证明非路径,不匹配
char * temp0= (char*)Pattern.c_str();
char* temp=strtok(temp0,"/");
string Temp(temp);
Pt.push_back(Temp);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
Pt.push_back(Temp1);
}
//处理模式串,结果保存在Pt中
temp0= (char*)Aa.c_str();
temp=strtok(temp0,"/");
string Temp3(temp);
A.push_back(Temp3);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
A.push_back(Temp1);
}
//处理查询串,结果保存在A中
for(int i=0;i<Pt.size();i++){
if(Pt[i].compare(A[i])==0){
continue;
}
else{
if(i==(Pt.size()-1)){
cout<<Name<<" ";
cout<<A[i];
for(int j=i+1;j<A.size();j++)
cout<<"/"<<A[j];
return 1;
}
else{
return 0;
}
}
}
}
*/
if( Pattern.find("<")==string::npos ){//没有正则的,直接匹配
if( Pattern.compare(Aa)==0 ){
cout<<Name<<endl;
return 1;
}
else return 0;
}
else{//int 和str匹配
string PP=Pattern;
char * temp0= (char*)PP.c_str();
char* temp=strtok(temp0,"/");
string Temp(temp);
Pt.push_back(Temp);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
Pt.push_back(Temp1);
}
//处理模式串,结果保存在Pt中
string AA=Aa;
temp0= (char*)AA.c_str();
temp=strtok(temp0,"/");
string Temp3(temp);
A.push_back(Temp3);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
A.push_back(Temp1);
}
//处理查询串,结果保存在A中
if((Pattern.find("<path>")==string::npos)&&(Pt.size()!=A.size()))
return 0;
vector <int> Int;
for(int i=0;i<Pt.size();i++){
if(Pt[i].find("<")==string::npos){//直接匹配的字符
if(Pt[i].compare(A[i])!=0){
return 0;
}
else {
continue;
}
}
else{
if(Pt[i].compare("<int>")==0){
int inttemp=0;
for(int nt=0;nt<A[i].length();nt++){
if(A[i][nt]>='0'&&A[i][nt]<='9'){
inttemp*=10;
inttemp+=A[i][nt]-'0';
}
else{
return 0;
}
}
Int.push_back(inttemp);
}
else if(Pt[i].compare("<str>")==0){
continue;
}
else if(Pt[i].compare("<path>")==0){
break;
}
else{
}
}
}
cout<<Name<<" ";
int num=0;
for(int i=0;i<Pt.size();i++){
if(Pt[i].compare("<int>")==0){
cout<<" "<<Int[num++];
continue;
}
if(Pt[i].compare("<str>")==0){
cout<<" "<<A[i];
continue;
}
if(Pt[i].compare("<path>")==0){
cout<<A[i];
for(int j=i+1;j<A.size();j++)
cout<<"/"<<A[j];
if(Aa[Aa.length()-1]=='/')
cout<<"/";
cout<<endl;
return 1;
}
}
cout<<endl;
return 1;
}
//无匹配
return 0;
}
void Query(char *a){
int sum=0;
for(int i=0;i<n;i++){
sum+=Correct(a,p[i]);
if(sum!=0)
break;
}
if(sum==0)
cout<<"404"<<endl;
return ;
}
int main(){
cin>>n>>m;
char ctemp;
cin.get(ctemp);
char intemp[110];
for(int i=0;i<n;i++){
cin.getline(p[i],110);
}
for(int i=0;i<m;i++){
cin.getline(quest,110);
Query(quest);
}
return 0;
}
100
非常感谢
https://blog.csdn.net/HNUCSEE_LJK/article/details/82599047
踩了很多坑才最终100分
#include<bits/stdc++.h>
using namespace std;
int n,m;
char p[110][110];
char quest[110];
int Correct(char * aa, char * pp){
if(pp[0]=='/'&&pp[1]==' '){
if(aa[0]=='/'&&aa[1]=='\0'){
for(int i=2;pp[i]!='\0';i++){
cout<<pp[i];
}
cout<<endl;
return 1;
}
else
return 0;
}
else{
if(aa[0]=='/'&&aa[1]=='\0'){
return 0;
}
}
char p[110];
int ppos=0;
for( ppos=0;pp[ppos]!='\0';ppos++){
p[ppos]=pp[ppos];
}
p[ppos]='\0';
//保存参数以免被更改
char a[110];
for( ppos=0;aa[ppos]!='\0';ppos++){
a[ppos]=aa[ppos];
}
a[ppos]='\0';
char* pattern=strtok(p," ");
string Pattern(pattern);
char* name=strtok(NULL," ");
//p已被更改
string Name(name);
string Aa(aa);
vector <string> Pt,A;
if(Aa[Aa.length()-1]=='/'){
if(Pattern[Pattern.length()-1]=='/'||Pattern[Pattern.length()-1]=='>'&&Pattern[Pattern.length()-2]=='h')
{
}
else{
return 0;
}
}
else{
if(Pattern[Pattern.length()-1]!='/'||Pattern[Pattern.length()-1]=='>'&&Pattern[Pattern.length()-2]=='h')
{
}
else{
return 0;
}
}
/*
if( Pattern.find("<path>")!=string::npos ){//有路径的,最后没有斜杠
//if(Aa[Aa.length()-1]=='/')return 0;//最后一个是斜杠,证明非路径,不匹配
char * temp0= (char*)Pattern.c_str();
char* temp=strtok(temp0,"/");
string Temp(temp);
Pt.push_back(Temp);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
Pt.push_back(Temp1);
}
//处理模式串,结果保存在Pt中
temp0= (char*)Aa.c_str();
temp=strtok(temp0,"/");
string Temp3(temp);
A.push_back(Temp3);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
A.push_back(Temp1);
}
//处理查询串,结果保存在A中
for(int i=0;i<Pt.size();i++){
if(Pt[i].compare(A[i])==0){
continue;
}
else{
if(i==(Pt.size()-1)){
cout<<Name<<" ";
cout<<A[i];
for(int j=i+1;j<A.size();j++)
cout<<"/"<<A[j];
return 1;
}
else{
return 0;
}
}
}
}
*/
if( Pattern.find("<")==string::npos ){//没有正则的,直接匹配
if( Pattern.compare(Aa)==0 ){
cout<<Name<<endl;
return 1;
}
else return 0;
}
else{//int 和str匹配
string PP=Pattern;
char * temp0= (char*)PP.c_str();
char* temp=strtok(temp0,"/");
string Temp(temp);
Pt.push_back(Temp);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
Pt.push_back(Temp1);
}
//处理模式串,结果保存在Pt中
string AA=Aa;
temp0= (char*)AA.c_str();
temp=strtok(temp0,"/");
string Temp3(temp);
A.push_back(Temp3);
while(temp!=NULL){
temp=strtok(NULL,"/");
if(temp==NULL)
break;
string Temp1(temp);
A.push_back(Temp1);
}
//处理查询串,结果保存在A中
if((Pattern.find("<path>")==string::npos)&&(Pt.size()!=A.size()))
return 0;
vector <int> Int;
for(int i=0;i<Pt.size();i++){
if(Pt[i].find("<")==string::npos){//直接匹配的字符
if(Pt[i].compare(A[i])!=0){
return 0;
}
else {
continue;
}
}
else{
if(Pt[i].compare("<int>")==0){
int inttemp=0;
for(int nt=0;nt<A[i].length();nt++){
if(A[i][nt]>='0'&&A[i][nt]<='9'){
inttemp*=10;
inttemp+=A[i][nt]-'0';
}
else{
return 0;
}
}
Int.push_back(inttemp);
}
else if(Pt[i].compare("<str>")==0){
continue;
}
else if(Pt[i].compare("<path>")==0){
break;
}
else{
}
}
}
cout<<Name<<" ";
int num=0;
for(int i=0;i<Pt.size();i++){
if(Pt[i].compare("<int>")==0){
cout<<" "<<Int[num++];
continue;
}
if(Pt[i].compare("<str>")==0){
cout<<" "<<A[i];
continue;
}
if(Pt[i].compare("<path>")==0){
cout<<A[i];
for(int j=i+1;j<A.size();j++)
cout<<"/"<<A[j];
if(Aa[Aa.length()-1]=='/')
cout<<"/";
cout<<endl;
return 1;
}
}
cout<<endl;
return 1;
}
//无匹配
return 0;
}
void Query(char *a){
int sum=0;
for(int i=0;i<n;i++){
sum+=Correct(a,p[i]);
if(sum!=0)
break;
}
if(sum==0)
cout<<"404"<<endl;
return ;
}
int main(){
cin>>n>>m;
char ctemp;
cin.get(ctemp);
char intemp[110];
for(int i=0;i<n;i++){
cin.getline(p[i],110);
}
for(int i=0;i<m;i++){
cin.getline(quest,110);
Query(quest);
}
return 0;
}
/*
7 7
/articles/2003/ special_case_2003
/articles/<int> year_archive_1
/articles/<int>/<int>/ month_archive
/articles/<int>/<int>/<str>/ article_detail
/static/<path> static_serve
/a const_string
/ empty
/articles/2004/
/articles/2004/06
/articles/1985/09/aloha/
/articles/hello/
/static/js/jquery.js
/a
/
*/