zoukankan      html  css  js  c++  java
  • 通配符

    ? 通配一个字符

    *  通配零至多个字符

    首先确定通配的字符串去掉*后,其长度比要匹配的字符串的长度小,这样就可以按照通配字符串来移动迭代器,而不必担心要匹配的字符串会越界。

    第一个*以前的字符串要严格匹配,第一个*以后的字符串,要属于匹配字符串。

    #include<iostream>
    #include<string>
    #include<list>
    #include<algorithm>
    
    
    using namespace std;
    
    struct Op
    {
    	bool operator()(char a, char b)
    	{
    		if(b == '?')
    		{
    			return true;
    		}
    		else if( b == a)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    };
    
    int main()
    {
    	string youxing;
    	string meixing;
    	cin>>youxing>>meixing;
    	
    	//比较长度,避免后面担心匹配字符串越界
    	list<char>ltemp;
    	ltemp.assign(youxing.begin(),youxing.end());
    	ltemp.remove('*');
    	if(ltemp.size()>meixing.size())
    	{
    		cout<<"false"<<endl;
    		return 0;
    	}
    
    	string::iterator iter1beg,iter1end,iter2beg,iter2end;
    	iter1beg = youxing.begin();
    	iter2beg = meixing.begin();
    	iter1end = find(iter1beg,youxing.end(),'*');
    	//第一个*之前的字符串严格匹配
    	while(iter1beg!=iter1end)
    	{
    		if(*iter1beg != *iter2beg)
    		{
    			if(*iter1beg != '?')
    			{
    				cout<<"false"<<endl;
    				return 0;
    			}
    		}
    		++iter1beg;
    		++iter2beg;
    	}
    
    	//第一个*以后的字符串要属于匹配字符串
    	while(iter1end != youxing.end() && (iter1end+1) != youxing.end())
    	{
    		iter1beg = iter1end+1;
    		iter1end = find(iter1beg,youxing.end(),'*');
    		iter2beg = search(iter2beg,meixing.end(),iter1beg,iter1end,Op());
    		if(iter2beg == meixing.end())
    		{
    			cout<<"false"<<endl;
    			return 0;
    		}
    		else
    		{
    			iter2beg = iter2beg + (iter1end-iter1beg);
    		}
    	}
    	if(iter1end == youxing.end())
    	{
    		if(iter2beg == meixing.end())
    		{
    			cout<<"true"<<endl;
    		}
    		else
    		{
    			cout<<"false"<<endl;
    		}
    	}
    	else if((iter1end+1) == youxing.end())
    	{
    		cout<<"ture"<<endl;
    	}
    
    	return 0;
    }
    
  • 相关阅读:
    numpy的shuffle函数
    特征值、特征向量
    keras的Embedding层
    自己写着玩的一个天气APP
    使用mbed进行STM32板子的开发
    提高ListView的效率
    自定义ListView里面的Item的内容
    Android控件使用自定义字体
    使用Handler类来更新UI
    MongoDB在Java下的增删查改
  • 原文地址:https://www.cnblogs.com/johnsblog/p/3763074.html
Copyright © 2011-2022 走看看