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;
    }
    
  • 相关阅读:
    475. Heaters
    69. Sqrt(x)
    83. Remove Duplicates from Sorted List Java solutions
    206. Reverse Linked List java solutions
    100. Same Tree Java Solutions
    1. Two Sum Java Solutions
    9. Palindrome Number Java Solutions
    112. Path Sum Java Solutin
    190. Reverse Bits Java Solutin
    202. Happy Number Java Solutin
  • 原文地址:https://www.cnblogs.com/johnsblog/p/3763074.html
Copyright © 2011-2022 走看看