mthoutai

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目:
给定两个字符串,求字符串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;
}
posted on 2017-08-02 09:08  mthoutai  阅读(507)  评论(0编辑  收藏  举报