累计大概提交了其七次吧,这里的话有一个地方是在通配的时候需要注意下,直接暴力求解的,基本上没有用到什么技巧,单个能通配就通配,是?按照单个字符处理,再去看''的情况,这个情况的话,直接循环往后匹配,需要匹配的字符串往后循环直到找到匹配的后一位,这里需要注意可能会遇到?的情况,可以把?当作里的,因为可以直接匹配,跳过就可以了,继续以往后匹配,如果遇到有两个?的情况,也就是*??的情况,也可以直接往后匹配
#include<iostream>
using namespace std;
string str1,str2;
int main(){
while(cin>>str1>>str2){
int i,j;
for(i=0,j=0;(str1[i]!=0&&str2[i]!=0);){
if(str1[i]=='?'||str1[i]==str2[j]){
//单个通配
i++;
j++;
}else if(str1[i]=='*'){
//*多项通配 先将第一项通配
i++,j++;
//当下一项是问号时,匹配到问问号后的一项
while(str1[i]=='?') i++;
//继续向下通配
while(str2[j]!=str1[i]&&str2[j]!=0){
j++;
}
}else if(str1[i]!=str2[j]){
//不匹配
i++;
j++;
break;
}
}
if(j==str2.length()){
cout<<"true"<<endl;
}else{
cout<<"false"<<endl;
}
}
return 0;
} 
京公网安备 11010502036488号