亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? searchmethod.cpp

?? 隨著計(jì)算機(jī)技術(shù)的廣泛應(yīng)用,在酒店客房管理中引入計(jì)算機(jī)管理技術(shù),成為一個(gè)值得深入研究的問(wèn)題。本系統(tǒng)采用c++作為開(kāi)發(fā)環(huán)境,本文首先概要的論述了ASP的有關(guān)知識(shí)與現(xiàn)狀。之后
?? CPP
字號(hào):
// SearchMethod.cpp: implementation of the CSearchMethod class.
//采用通配符匹配字符竄的方法類(lèi)接口
//語(yǔ)法說(shuō)明:本類(lèi)實(shí)現(xiàn)的通配符號(hào)有兩個(gè)"?"and"*"
//   '?'----------可以代替一個(gè)字符
//   '*'----------可以代替任意長(zhǎng)度的字符竄
//example: "3*6?8"與"345678"兩個(gè)字符竄是可以匹配的
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "qq.h"
#include "SearchMethod.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
static LPCTSTR STRINGS[]=
{
	"!","@","#","$","%","^","&",
		"-","+","~",":","<", ">"," ","(",")","=","==",
		"\\","//","|","||","&&","/*","*/",
		"{","}","{}","[","]","[]",";","'",".",
		"`","$$","!=",
		NULL
};
CSearchMethod::CSearchMethod()
{
	for(int i=0;i<50;i++)
	{
		serial[i]=0;//賦初值
		serialchar[i]=' ';
	}
}

CSearchMethod::~CSearchMethod()
{

}
//////////////////////////////////////////////////////////////////////////
/*             檢查輸入的字符是否合乎語(yǔ)法規(guī)則               */
//////////////////////////////////////////////////////////////////////////
bool CSearchMethod::CheckString(CString str)
{
	CString strText=str;
	int i=0;
	while (i<strText.GetLength()&&strText[i]!=NULL)
	{
		int j=0;
		while(STRINGS[j]!=NULL)
		{
			CString str1=strText[i];
			if(str1==STRINGS[j])
			{
				return false;
			}
			j++;
		}
		i++;
	}
	//因?yàn)橥ㄅ浞?可以代替任何長(zhǎng)度,所以不能有連續(xù)兩個(gè)**符號(hào)
	int k=0;
    while(k+1<strText.GetLength()&&strText[k]!=NULL&&strText[k+1]!=NULL)
	{
		if(strText[k]=='*'&&strText[k+1]=='*')
		{
			return false;
		}
		k++;
	}
    return true;
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                   str1:需要匹配的字符竄
                   str2:源字符竄
         說(shuō)明:若str1中的部分或者全部字符與str2相同則稱(chēng)為匹配
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
bool CSearchMethod::IsMatchString(CString str1, CString str2)
{
       //先清空
	for(int m=0;m<50;m++)
	{
		serial[m]=0;
		serialchar[m]=' ';
	}
    //循環(huán)str1查找非特殊字符
	int i=0,j=0;
	while (i<str1.GetLength()&&str1[i]!=NULL)
	{//search the serial and serialchar
		if(str1[i]!='?'&&str1[i]!='*')
		{
            serial[j]=i;//保存序號(hào)
			serialchar[j]=str1[i];//保存字符
			j++;
		}
		i++;
	}
	bool bAllZero=true;//判斷得出的結(jié)果是否全為0
	for(i=0;i<50;i++)
	{
		if(serial[i]==0)
		{
			bAllZero=bAllZero&true;
		}
		else
		{
			bAllZero=bAllZero&false;
		}
	}
	bool bEnableMates=true;
	if(bAllZero)
	{//若輸入的字符全為0
		if(str1.GetLength()==1)
		{
            if(str1[0]=='*')
			{
				bEnableMates=true;
			}
			else if(str1[0]=='?')
			{
				if(str2.GetLength()>1)
				{
					bEnableMates=false;
				}
				else
				{
					bEnableMates=true;
				}
			}
			else
			{
				if(str2.GetLength()==1&&str1[0]==str2[0])
				{
					bEnableMates=true;
				}
				else
				{
					bEnableMates=false;
				}
			}
		}
		else
		{//不是只有一位,有多位的特殊符號(hào)
			BOOL bAllSame=true;//是否全為?
			for(int i=0;i<str1.GetLength();i++)
			{
                if(str1[i]=='?')
				{
					bAllSame=bAllSame&true;
				}
				else{bAllSame=bAllSame&false;}
			}
			if(bAllSame)
			{//全為?
				if(str1.GetLength()==str2.GetLength())
				{
					bEnableMates=true;
				}
				else{bEnableMates=false;}
			}
			else
			{
				if(str1[0]!=str2[0])
				{
					bEnableMates=false;
				}
				else
				{bEnableMates=true;}
			}
		}
	}
	else
	{
		i=0;
		while(serial[i+1]!=0)
		{
			//得到分段的字符竄
			CString s1=str1.Mid(serial[i],serial[i+1]-serial[i]+1);
			int k=0,pre=0,next=0;
			while(k<str2.GetLength()&&str2[k]!=NULL)
			{
				if(str2[k]==serialchar[i])
				{
					pre=k;//前一個(gè)字符
				}
				if(str2[k]==serialchar[i+1])
				{
					next=k;//后一個(gè)字符
					break;
				}
				k++;
			}
			CString s2=str2.Mid(pre,next-pre+1);
			bEnableMates=bEnableMates&EnableMatches(s1,s2);
			i++;
		}
		//分析字符的前面一部分
		bool bsuceess=false;
		if(serial[0]!=0)
		{
			BOOL bAllSame=true;//是否全為'?'
			for(int i=0;i<serial[0];i++)
			{
				if(str1[i]=='?')
				{
					bAllSame=bAllSame&true;
				}
				else
				{
					bAllSame=bAllSame&false;
				}
			}
			if(bAllSame)
			{//若全為'?'
                int nCount=0;
				for(int i=0;i<str2.GetLength();i++)
				{
					if(str2[i]==serialchar[0])
					{
						nCount=i;
						break;
					}
				}
				if(nCount==serial[0])
				{//若兩個(gè)字符竄的前面一部分的字符個(gè)數(shù)相同
                    bEnableMates=bEnableMates&true;
				}
				else{bEnableMates=bEnableMates&false;}
			}
			else
			{
				bEnableMates=bEnableMates&true;
			}
		}
		else
		{
			if(str1[0]==str2[0])
			{
				bsuceess=true;
			}
			else{bsuceess=false;}
            bEnableMates=bEnableMates&bsuceess;
		}
		//分析后面一部分
		bsuceess=false;
		int nFirstZero=0;
		for(i=0;i<50;i++)
		{
			if(serial[i]==0&&serial[i+1]==0)
			{
				nFirstZero=i;
				break;
			}
		}
            if(serial[nFirstZero-1]==str1.GetLength()-1)
			{//不存在通配符號(hào)
                 if(serialchar[nFirstZero-1]==str2[str2.GetLength()-1])
				 {
					 bsuceess=true;
				 }
				 else{bsuceess=false;}
				 bEnableMates=bEnableMates&bsuceess;//將后部分的結(jié)果并入總結(jié)果中
			}
			else
			{
				if(serialchar[nFirstZero-1]==str2[str2.GetLength()-1])
				{
					bEnableMates=bEnableMates&false;
				}
				else
				{
					BOOL bAllSame=true;
					for(int i=serial[nFirstZero-1]+1;i<str1.GetLength();i++)
					{
						if(str1[i]=='?')
						{
							bAllSame=bAllSame&true;
						}
						else{bAllSame=bAllSame&false;}
					}
					if(bAllSame)
					{
                        int nCount=0;
						for(int i=0;i<str2.GetLength();i++)
						{
							if(str2[i]==serialchar[nFirstZero-1])
							{
								nCount=i;
								break;
							}
						}
						int nLong1=str1.GetLength()-serial[nFirstZero-1]-1;
						int nLong2=str2.GetLength()-nCount-1;
						if(nLong1==nLong2)
						{
							bEnableMates=bEnableMates&true;
						}
						else{bEnableMates=bEnableMates&false;}
					}
					else{bEnableMates=bEnableMates&true;}
				}

			}
	}
	return bEnableMates;
}

bool CSearchMethod::EnableMatches(CString str1, CString str2)
{//判斷兩個(gè)首尾字符相同的字符竄是否匹配 str1="a*b",str2="acdfeb"
    if(str1.GetLength()>str2.GetLength())
	{
		return false;
	}
	else
	{
		if(str1.GetLength()<=2&&str2.GetLength()>2)
		{
			return false;
		}
		else 
		{
			BOOL bAllSame=true;
			
			for (int i=1;i<str1.GetLength()-1;i++)
			{
				if(str1[i]=='?')
				{
					bAllSame=bAllSame&true;
				}
				else{bAllSame=bAllSame&false;}
			}
			if(bAllSame)
			{
				if(str1.GetLength()==str2.GetLength())
				{
					return true;
				}
				else{return false;}
			}
            else{return true;}
		}
	}
}

int CSearchMethod::FindingString(const char *lpszSour, const char *lpszFind, int nStart)
{
    if(lpszSour == NULL || lpszFind == NULL || nStart < 0)
		return -1;
	
	int m = strlen(lpszSour);
	int n = strlen(lpszFind);
	
	if( nStart+n > m )
		return -1;
	
	if(n == 0)
		return nStart;
	
	//KMP算法
	int* next = new int[n];
	//得到查找字符串的next數(shù)組
	{	n--;
	
	int j, k;
	j = 0;
	k = -1;
	next[0] = -1;
	
	while(j < n)
	{	if(k == -1 || lpszFind[k] == '?' || lpszFind[j] == lpszFind[k])
	{	j++;
				k++;
				next[j] = k;
	}
	else
		k = next[k];
	}
	
	n++;
	}
	
	int i = nStart, j = 0;
	while(i < m && j < n)
	{
		if(j == -1 || lpszFind[j] == '?' || lpszSour[i] == lpszFind[j])
		{	i++;
		j++;
		}
		else
			j = next[j];
	}
	
	delete []next;
	
	if(j >= n)
		return i-n;
	else
		return -1;
}
//功	  能:帶通配符的字符串匹配
//參	  數(shù):lpszSour是一個(gè)普通字符串;
//			  lpszMatch是一可以包含通配符的字符串;
//			  bMatchCase為0,不區(qū)分大小寫(xiě),否則區(qū)分大小寫(xiě)。
//返  回  值:匹配,返回1;否則返回0。
//通配符意義:
//		‘*’	代表任意字符串,包括空字符串;
//		‘?’	代表任意一個(gè)字符,不能為空;
bool CSearchMethod::MatchingString(const char *lpszSour, const char *lpszMatch, bool bMatchCase)
{
   	if(lpszSour == NULL || lpszMatch == NULL)
		return false;

	if(lpszMatch[0] == 0)//Is a empty string
	{
		if(lpszSour[0] == 0)
			return true;
		else
			return false;
	}

	int i = 0, j = 0;

	//生成比較用臨時(shí)源字符串'szSource'
	char* szSource =
		new char[ (j = strlen(lpszSour)+1) ];

	if( bMatchCase )
	{	//memcpy(szSource, lpszSour, j);
		while( *(szSource+i) = *(lpszSour+i++) );
	}
	else
	{	//Lowercase 'lpszSour' to 'szSource'
		i = 0;
		while(lpszSour[i])
		{	if(lpszSour[i] >= 'A' && lpszSour[i] <= 'Z')
				szSource[i] = lpszSour[i] - 'A' + 'a';
			else
				szSource[i] = lpszSour[i];

			i++;
		}
		szSource[i] = 0;
	}

	//生成比較用臨時(shí)匹配字符串'szMatcher'
	char* szMatcher = new char[strlen(lpszMatch)+1];

	//把lpszMatch里面連續(xù)的“*”并成一個(gè)“*”后復(fù)制到szMatcher中
	i = j = 0;
	while(lpszMatch[i])
	{
		szMatcher[j++] = (!bMatchCase) ?
								( (lpszMatch[i] >= 'A' && lpszMatch[i] <= 'Z') ?//Lowercase lpszMatch[i] to szMatcher[j]
										lpszMatch[i] - 'A' + 'a' :
										lpszMatch[i]
								) :
								lpszMatch[i];		 //Copy lpszMatch[i] to szMatcher[j]
		//Merge '*'
		if(lpszMatch[i] == '*')
			while(lpszMatch[++i] == '*');
		else
			i++;
	}
	szMatcher[j] = 0;

	//開(kāi)始進(jìn)行匹配檢查

	int nMatchOffset, nSourOffset;

	bool bIsMatched = true;
	nMatchOffset = nSourOffset = 0;
	while(szMatcher[nMatchOffset])
	{
		if(szMatcher[nMatchOffset] == '*')
		{
			if(szMatcher[nMatchOffset+1] == 0)
			{	//szMatcher[nMatchOffset]是最后一個(gè)字符

				bIsMatched = true;
				break;
			}
			else
			{	//szMatcher[nMatchOffset+1]只能是'?'或普通字符

				int nSubOffset = nMatchOffset+1;

				while(szMatcher[nSubOffset])
				{	if(szMatcher[nSubOffset] == '*')
						break;
					nSubOffset++;
				}

				if( strlen(szSource+nSourOffset) <
						size_t(nSubOffset-nMatchOffset-1) )
				{	//源字符串剩下的長(zhǎng)度小于匹配串剩下要求長(zhǎng)度
					bIsMatched = false; //判定不匹配
					break;			//退出
				}

				if(!szMatcher[nSubOffset])//nSubOffset is point to ender of 'szMatcher'
				{	//檢查剩下部分字符是否一一匹配

					nSubOffset--;
					int nTempSourOffset = strlen(szSource)-1;
					//從后向前進(jìn)行匹配
					while(szMatcher[nSubOffset] != '*')
					{
						if(szMatcher[nSubOffset] == '?')
							;
						else
						{	if(szMatcher[nSubOffset] != szSource[nTempSourOffset])
							{	bIsMatched = false;
								break;
							}
						}
						nSubOffset--;
						nTempSourOffset--;
					}
					break;
				}
				else//szMatcher[nSubOffset] == '*'
				{	nSubOffset -= nMatchOffset;

					char* szTempFinder = new char[nSubOffset];
					nSubOffset--;
					memcpy(szTempFinder, szMatcher+nMatchOffset+1, nSubOffset);
					szTempFinder[nSubOffset] = 0;

					int nPos = FindingString(szSource+nSourOffset, szTempFinder, 0);
					delete []szTempFinder;

					if(nPos != -1)//在'szSource+nSourOffset'中找到szTempFinder
					{	nMatchOffset += nSubOffset;
						nSourOffset += (nPos+nSubOffset-1);
					}
					else
					{	bIsMatched = false;
						break;
					}
				}
			}
		}		//end of "if(szMatcher[nMatchOffset] == '*')"
		else if(szMatcher[nMatchOffset] == '?')
		{
			if(!szSource[nSourOffset])
			{	bIsMatched = false;
				break;
			}
			if(!szMatcher[nMatchOffset+1] && szSource[nSourOffset+1])
			{	//如果szMatcher[nMatchOffset]是最后一個(gè)字符,
				//且szSource[nSourOffset]不是最后一個(gè)字符
				bIsMatched = false;
				break;
			}
			nMatchOffset++;
			nSourOffset++;
		}
		else//szMatcher[nMatchOffset]為常規(guī)字符
		{
			if(szSource[nSourOffset] != szMatcher[nMatchOffset])
			{	bIsMatched = false;
				break;
			}
			if(!szMatcher[nMatchOffset+1] && szSource[nSourOffset+1])
			{	bIsMatched = false;
				break;
			}
			bool b=bIsMatched;
			nMatchOffset++;
			nSourOffset++;
		}
	}

	delete []szSource;
	delete []szMatcher;
	return bIsMatched;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产91久久久久| 亚洲一卡二卡三卡四卡| 在线不卡一区二区| 色激情天天射综合网| 99久久99久久精品国产片果冻| 精品一区在线看| 久久99国产精品麻豆| 国产一区二区主播在线| 久久精品国产99国产| 激情综合色播五月| 国产精品一区二区x88av| 国产成人免费在线| www.在线欧美| 色吊一区二区三区| 欧美日韩卡一卡二| 欧美一级理论片| 久久一留热品黄| 国产欧美视频一区二区| 国产免费成人在线视频| 国产精品免费观看视频| 亚洲日本成人在线观看| 亚洲一区二区黄色| 日日欢夜夜爽一区| 久久国产剧场电影| 岛国一区二区在线观看| av爱爱亚洲一区| 欧美影院精品一区| 制服丝袜激情欧洲亚洲| 日韩免费看的电影| 中文字幕 久热精品 视频在线| 亚洲欧洲日韩女同| 午夜激情久久久| 激情综合网最新| 波多野结衣亚洲| 欧美丝袜第三区| 欧美大片在线观看| 国产精品久久看| 视频在线观看一区| 国产精品一区二区无线| 一本久久a久久免费精品不卡| 在线免费观看日韩欧美| 日韩一区二区在线看| 国产色产综合色产在线视频| 亚洲女同女同女同女同女同69| 亚洲电影一区二区三区| 精品一区二区三区视频| 91丨porny丨最新| 欧美一区二区三区公司| 国产精品女同一区二区三区| 亚洲自拍欧美精品| 国产乱码一区二区三区| 中文字幕人成不卡一区| 午夜精品久久久久久| 国产成人三级在线观看| 欧美日韩国产一级二级| 久久精品一二三| 亚洲成人中文在线| 国产成人精品一区二| 欧美日韩国产三级| 国产精品人妖ts系列视频 | 9久草视频在线视频精品| 欧美精品丝袜久久久中文字幕| 久久久精品2019中文字幕之3| 一区二区视频在线看| 激情av综合网| 911国产精品| 亚洲欧洲另类国产综合| 久久99精品久久久久久| 日本韩国视频一区二区| 久久久久成人黄色影片| 天堂av在线一区| 91首页免费视频| www欧美成人18+| 手机精品视频在线观看| 色婷婷久久99综合精品jk白丝| 久久蜜臀精品av| 人人超碰91尤物精品国产| 91久久一区二区| 日本一区二区动态图| 麻豆国产精品官网| 欧美日韩美少妇| 亚洲视频 欧洲视频| 国产福利一区二区三区在线视频| 欧美午夜不卡在线观看免费| 国产精品色一区二区三区| 国产一区二区免费在线| 91精品国产麻豆国产自产在线| 一区二区在线观看av| 91在线免费看| 亚洲欧洲日本在线| 国产v综合v亚洲欧| 久久久高清一区二区三区| 日韩中文欧美在线| 欧美日韩日本视频| 夜夜嗨av一区二区三区| 91在线视频免费91| 国产精品久久久久久福利一牛影视 | 欧美日韩高清在线播放| 一区二区三区在线视频免费| 9色porny自拍视频一区二区| 国产精品久久久久久久裸模| 国产精品1024久久| 国产人久久人人人人爽| 国产精品12区| 中日韩av电影| 成人av一区二区三区| 国产精品欧美精品| 国产欧美综合在线| 国产精品伊人色| 久久久精品黄色| 国产+成+人+亚洲欧洲自线| 国产亚洲成av人在线观看导航| 国模套图日韩精品一区二区| 26uuu色噜噜精品一区| 国内精品写真在线观看| 久久精品夜色噜噜亚洲aⅴ| 丁香婷婷深情五月亚洲| 中文字幕一区二区三区色视频 | 日韩免费一区二区三区在线播放| 美女视频黄久久| 精品久久人人做人人爽| 国产精一品亚洲二区在线视频| 国产欧美综合在线观看第十页| 菠萝蜜视频在线观看一区| 亚洲欧美日韩国产成人精品影院 | 中文字幕精品综合| av成人免费在线观看| 亚洲影视在线播放| 91精品国产色综合久久不卡蜜臀 | 精品视频1区2区| 丝袜美腿亚洲综合| 精品对白一区国产伦| 国产成a人亚洲| 亚洲精品中文在线观看| 欧美精品一二三四| 国精产品一区一区三区mba桃花| 国产片一区二区三区| 91免费看视频| 日韩av电影天堂| 国产午夜亚洲精品羞羞网站| 94-欧美-setu| 蜜臀av一区二区在线观看| 国产亚洲欧洲一区高清在线观看| gogo大胆日本视频一区| 亚洲国产cao| 久久美女高清视频| 91成人在线免费观看| 午夜久久电影网| 日韩影院免费视频| 欧美国产视频在线| 91国产成人在线| 国产一区欧美日韩| 亚洲精品中文在线| 久久九九久久九九| 欧美另类变人与禽xxxxx| 国产精品夜夜嗨| 午夜私人影院久久久久| 国产亚洲欧美一级| 欧美精品777| www.av精品| 美女免费视频一区二区| **性色生活片久久毛片| 日韩精品一区二区三区中文不卡 | 国产成人精品网址| 亚洲va欧美va人人爽午夜 | 国产在线看一区| 亚洲愉拍自拍另类高清精品| 久久影院视频免费| 欧美日韩一区二区三区高清| 成人综合婷婷国产精品久久蜜臀 | 国产成人免费视频精品含羞草妖精| 一区二区三区四区高清精品免费观看 | 国产剧情一区二区三区| 亚洲高清免费视频| 国产精品每日更新| 精品国产一区二区三区忘忧草| 日本久久精品电影| 成人黄色av电影| 老色鬼精品视频在线观看播放| 亚洲另类在线一区| 国产欧美va欧美不卡在线| 7777精品久久久大香线蕉| 99国产精品国产精品久久| 国产一区二区三区在线观看免费视频| 亚洲综合男人的天堂| 欧美国产欧美综合| 欧美大片免费久久精品三p| 欧美亚洲一区二区在线| av网站免费线看精品| 国产成人啪免费观看软件| 久久97超碰国产精品超碰| 天天综合色天天综合色h| 亚洲午夜在线电影| 亚洲男同1069视频| 国产精品久久久久一区| 国产精品毛片大码女人| 精品国产sm最大网站免费看| 欧美一区二区人人喊爽| 欧美裸体bbwbbwbbw| 在线观看精品一区|