累计大概提交了其七次吧,这里的话有一个地方是在通配的时候需要注意下,直接暴力求解的,基本上没有用到什么技巧,单个能通配就通配,是?按照单个字符处理,再去看''的情况,这个情况的话,直接循环往后匹配,需要匹配的字符串往后循环直到找到匹配的后一位,这里需要注意可能会遇到?的情况,可以把?当作里的,因为可以直接匹配,跳过就可以了,继续以往后匹配,如果遇到有两个?的情况,也就是*??的情况,也可以直接往后匹配
#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; }