含通配符的字符串匹配问题

时间:2022-09-02 06:28:20

题目:
给定两个字符串,求字符串2,在字符串1中的最先匹配结果。字符串2中 可以存在’*’符号,且该符号可以代表任意字符,即字符串2中存在通配符。
例如:输入:abcdefghabef,a*f 输出:abcdef

#include<iostream>
#include<string>
using namespace std;

int main()
{
int i=0,len=0,len1,len2,j=0,begin=0;
string s,s1,s2,s3;
getline(cin,s);
len = s.size();
///////////////////////////////
for(i=0;i<len;i++)
{
if(s[i]!=',')
{
s2+=s[i];
}
else
{
s1 = s2;
s2.clear();
}
}
/////开始匹配/////////////////////
len1 = s1.size();
len2 = s2.size();

if(s2 == "*")
{
cout<<s1;
return 0;
}
for(i=0;i<len1;i++)
{
while((s2[j]=='*')||(s1[i]==s2[j]))
{
if(s2[j]=='*')
{
if(j+1==len)
{
s3.assign(s1,begin,len1-begin);
cout<<s3;
return 0;
}
while(s1[i]!=s2[j+1])
{
i++;
if(i==len1)
{
cout<<"失败";
return 0;
}
}
j++;
}
else if(s1[i]==s2[j])
{
while(s1[i]==s2[j])
{
i++;
j++;
if(j==len2)
{
s3.assign(s1,begin,i-begin);
cout<<s3;
return 0;
}
}
}
}
j=0;
begin = i;
}
return 0;
}