实现一个挺高级的字符匹配算法: 给一串很长字符串,要求找到符合要求的字符串,例如目的串:123 1******3***2 ,12*****3 这些都要找出来

实现一个挺高级的字符匹配算法: 给一串很长字符串,要求找到符合要求的字符串,例如目的串:123 1******3***2 ,12*****3 这些都要找出来

方法一:

#include <iostream>
using namespace std;
bool is_baohan(char *str1 ,char *str2)
{
	int i , j ,k ,len1 ,len2;
	bool is_b = true;
	len1 = strlen(str1);
	len2 = strlen(str2);
	int count[100] ={0};
	for(i = 0 ;i<len1 ;i++)
	{
		for(j = 0; j<len2 ;j++)
		{
			if(str1[i]==str2[j])
			{
				count[i] = 1;
			}
		}
	}
	for(i= 0 ;i<len1 ;i++)
	{
		if(count[i]!=1)
		{
          is_b = false;
		}
	}
	is_b = true;
	return is_b;
}
void main()
{
	char *str2="1***2***3***";
	char *str1="132";
	bool is_b = is_baohan(str1,str2);
	if(is_b)
	{
		cout<<"匹配";
	}
	else
	{
		cout<<"不匹配";
	}

}

方法二:

由于是字符串,字符对应唯一的ASCII码,将字符串1中的字符对应的ASCII码值设置一定的值,如果在字符串2中,字符串的ASCII字符也是一样的值

#include <iostream>
using namespace std;
bool is_pipei(char *str1 ,char *str2)
{
	bool is_baohan = true;
	int exist[256]={0};
	int len1,len2,i,j;
	len1 = strlen(str1);
	len2 = strlen(str2);
	for(i = 0 ;i<len1 ;i++)
	{
		exist[str1[i]] = 1;
	}
	for(i = 0 ;i<len2 ;i++)
	{
		if(exist[str2[i]] == 0)
		{
			is_baohan = false;
		}
	}
	return is_baohan;
	
}

void main()
{
	char *str1="1**2**3***";
	char *str2="123";
	bool is_baohan=is_pipei(str1 ,str2);
	if(is_baohan)
	{
		cout<<"匹配";
	}
	else
	{
		cout<<"不匹配";
	}
}

 

点赞