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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? strmatch.c

?? 求2個或多個文本間的公共子串
?? C
字號:
#include "strmatch.h"#include "publib.h"static unsigned long StrHash(char *arKey, unsigned int nKeyLength){	unsigned long h = 0, g;	char *arEnd = arKey + nKeyLength;		while (arKey < arEnd) {		h = (h << 4) + *arKey++;		if ((g = (h & 0xF0000000))) {			h = h ^ (g >> 24);			h = h ^ g;		}	}	return h;}void printMatrix(smch_t * loStr, smch_t * shStr, size_t ** pMatrix, const size_t row, const size_t col){	size_t outurn = 0;	size_t inturn = 0;	size_t NUM = 50;	size_t BEG = 0;	char str[3];		printf("     ");        for(outurn = BEG; outurn < min(col, NUM); ++outurn){		printf("%.2u", outurn);	}	printf("\n");		printf("     ");	for(outurn = BEG; outurn < min(row, NUM); ++outurn){		*((smch_t *)str) = shStr[outurn];		str[2] = 0;		printf("%s", str);	}	printf("\n");				for(outurn = BEG; outurn < min(row, NUM); ++outurn){		*((smch_t *)str) = loStr[outurn];		str[2] = 0;		printf("%u %s ", outurn, str);				for(inturn = BEG; inturn < min(col, NUM); ++inturn){			printf("%u ", pMatrix[outurn][inturn]);		}		printf("\n");	}	printf("\n\n");}#ifndef INCRE_SIZE#define INCRE_SIZE 30#endifint AddCommonStr(const size_t begPos, const size_t strLen, smch_t * strShort, StrList * pStrList, const size_t listSize){		size_t modPos = 0;	StrNode * pNodeCur = NULL; 	size_t curPos = 0;	unsigned long ulHashVal = 0;	ulHashVal = StrHash((char *)(&(strShort[begPos])), strLen * sizeof(smch_t) );		modPos = ulHashVal % listSize;	pNodeCur = pStrList[modPos].pNodeArray;	/**************	if(18 == modPos){		printf("we got it");	}	**************/		if(NULL == pNodeCur){		if(NULL == (pNodeCur = (StrNode *)malloc(INCRE_SIZE * sizeof(StrNode)))){			perror("Failed to allocate memory");			return -1;		}		memset((char *)pNodeCur, 0, INCRE_SIZE * sizeof(StrNode));		pStrList[modPos].pNodeArray = pNodeCur;		pStrList[modPos].memLen = INCRE_SIZE;		pStrList[modPos].memUse = 0;				pNodeCur->pSmch = &(strShort[begPos]);		pNodeCur->uiBegPos = begPos;		pNodeCur->uiSmchLen = strLen;		pStrList[modPos].memUse += 1;	}else{		for(curPos = 0; (curPos < pStrList[modPos].memUse) &&\		((pNodeCur[curPos].uiSmchLen != strLen) ||\		(0 != strncmp((char *)((pNodeCur + curPos)->pSmch), \		(char *)(strShort + begPos), strLen * sizeof(smch_t)))); ++curPos);				if(curPos >= pStrList[modPos].memUse){			(pNodeCur + curPos)->pSmch = &(strShort[begPos]);			(pNodeCur + curPos)->uiBegPos = begPos;			(pNodeCur + curPos)->uiSmchLen = strLen;						pStrList[modPos].memUse += 1;		}				if(pStrList[modPos].memUse >= pStrList[modPos].memLen){			pStrList[modPos].memLen += INCRE_SIZE;						if(NULL == (pStrList[modPos].pNodeArray = (StrNode *)realloc(\			pStrList[modPos].pNodeArray, \			pStrList[modPos].memLen * sizeof(StrNode) ))){				perror("Failed to allocate memory");				return -1;			}		}																																									                                        }		return 0;}int strmatch(smch_t * strLong, const size_t nLongLen, smch_t * strShortOffset, const size_t offset, const size_t nShortLen, StrList * pStrList, const size_t listSize){	smch_t * strShort = strShortOffset;	size_t shturn = 0;	size_t loturn = 0;	size_t listPos = 0;		size_t uiLeftTop = 0;	size_t ** pMatchMatrix = NULL;	const size_t IDX_SIZE = min(2333, max(15, nShortLen / 3));	CharIndex * idxArray[IDX_SIZE]; /* size of 2333 */	size_t * pCharList = NULL;	size_t uiListSize = 0;		size_t temp = 0;	int * markList[2];		size_t uiIdx = 0;		size_t uiOldEnd = 0;	size_t uiOldCur = 0;	size_t uiNewCur = 0;	size_t uiShPos = 0;	size_t uiTempNum = 0;	int HasChar = -1;	/*************	printf(">>>>>>>>%s", (char *)strLong);	printf("\n>>>>>>>>%s\n", (char *)strShort);	**************/		if( (0 == nShortLen) || (0 == nLongLen))		return 0;	if( (NULL == strShortOffset) || (NULL == strLong) || (NULL == pStrList) || (0 == listSize))	        return -1;			temp = nLongLen * sizeof(size_t *);	if(NULL == (pMatchMatrix = (size_t **)malloc(temp))){		perror("Failed to allocate memory");		return -1;	}	memset(pMatchMatrix, 0, temp);		for(loturn = 0; loturn < nLongLen; ++loturn){		temp = nShortLen * sizeof(size_t);		pMatchMatrix[loturn] = (size_t *)malloc(temp);		if(NULL == pMatchMatrix[loturn]){			perror("Failed to allocate memory");			return -1;		}		memset(pMatchMatrix[loturn], 0, temp);	}	if(-1 == IndexCharForStr(strShort, nShortLen, idxArray, IDX_SIZE)){		perror("Failed to create Index");		return -1;	}	if( (NULL == (markList[0] = (int *)malloc(nShortLen * sizeof(int)))) || \		(NULL == (markList[1] = (int *)malloc(nShortLen * sizeof(int))))){		perror("Failed to allocate memory");		return -1;	}	/*********	memset((char *)markList[0], 0, nShortLen * sizeof(int));	memset((char *)markList[1], 0, nShortLen * sizeof(int));	*********/		for(loturn = 0; loturn < nLongLen; ++loturn){		if(strLong[loturn] == strShort[0]){			pMatchMatrix[loturn][0] = 1;		}	}	for(shturn = 0; shturn < nShortLen; ++shturn){		if(strLong[0] == strShort[shturn]){			pMatchMatrix[0][shturn] = 1;		}	}		uiIdx = 0;	uiOldEnd = 0;	uiOldCur = 0;	uiNewCur = 0;	for(loturn = 1; loturn < nLongLen; ++loturn){			/********		printMatrix(strLong, strShort, pMatchMatrix, nLongLen, nShortLen);		printf("\n <loturn %u>before\n", loturn);		for(temp = 0; temp < uiOldEnd; ++temp){			printf(" %u => %u ", markList[uiIdx][temp], pMatchMatrix[loturn - 1][markList[uiIdx][temp]]);		}		printf("\n");		***************/							if(-1 != (HasChar = GetCharPosList(strLong[loturn], idxArray, IDX_SIZE, &pCharList, &uiListSize))){		       			/**********			printf("\nloca => ");			for(listPos = 0; listPos < uiListSize; ++listPos)				printf("%u ", pCharList[listPos]);			printf("\n");			**********/						for(listPos = 0; listPos < uiListSize; ++listPos){							if(0 == (shturn = pCharList[listPos]))					continue;							/*******					printf("=> %d ", shturn);				*******/					if(nShortLen <= shturn){						perror("overflow");						return -1;					}					if(-1 == (uiLeftTop = pMatchMatrix[loturn - 1][shturn - 1])){						perror("size_t overflow");						return -1;					}										if(strLong[loturn] == strShort[shturn]){						pMatchMatrix[loturn][shturn] = uiLeftTop + 1;										if(shturn < (nShortLen - 1)){							markList[1 - uiIdx][uiNewCur] = shturn;							++uiNewCur;						}else{							AddCommonStr(shturn - uiLeftTop + offset, uiLeftTop + 1, \							strShort - offset, pStrList, listSize);						}																									/***********						printf(" <add> %u <%u, %u, %u>\n", shturn, loturn, shturn, uiLeftTop + 1);											for(; (uiOldCur < uiOldEnd) && \						((uiShPos = markList[uiIdx][uiOldCur]) < (shturn - 1)); ++uiOldCur){							if(2 <= (uiTempNum = pMatchMatrix[loturn - 1][uiShPos])){								AddCommonStr(uiShPos - uiTempNum + 1, uiTempNum, \								strShort - offset * sizeof(smch_t), pStrList, listSize);							}						}						**********/												for(uiOldCur = 0; uiOldCur < uiOldEnd; ++uiOldCur){							if((shturn - 1) == markList[uiIdx][uiOldCur]){								markList[uiIdx][uiOldCur] = -1;							}						}				}																	}					}				/*********************		printf("\nafter\n");		for(temp = 0; temp < uiOldEnd; ++temp){			printf(" %d => %u ", markList[uiIdx][temp], pMatchMatrix[loturn - 1][markList[uiIdx][temp]]);		}		printf("\n");		*******************/				for(uiOldCur = 0; uiOldCur < uiOldEnd; ++uiOldCur){		       	if((-1 != (uiShPos = markList[uiIdx][uiOldCur])) &&\			(2 <= (uiTempNum = pMatchMatrix[loturn - 1][uiShPos]))){				AddCommonStr(uiShPos - uiTempNum + 1 + offset, uiTempNum, \				strShort - offset, pStrList, listSize);			}		}				if(-1 != HasChar){			uiOldEnd = uiNewCur;		}else{			uiOldEnd = 0;		}				uiNewCur = 0;		uiOldCur = 0;		uiIdx = 1 - uiIdx;				}		/***************		if( ((loturn == nLongLen) || (loturn == nShortLen)) && (0 != uiOldEnd)){			if((-1 != (uiShPos = markList[uiIdx][uiOldCur])) &&\                (2 <= (uiTempNum = pMatchMatrix[loturn - 1][uiShPos]))){			AddCommonStr(uiShPos - uiTempNum + 1, uiTempNum, strShort,\			nShortLen, pStrList, listSize);		}	}	**********************/	for(loturn = 0; loturn < nLongLen; ++loturn)		free(pMatchMatrix[loturn]);	free(pMatchMatrix);	free(markList[0]);	free(markList[1]);	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产69精品久久99不卡| 色综合天天综合网天天看片| 国产精品理论在线观看| 99久久精品免费看国产| 狠狠色狠狠色合久久伊人| 亚洲视频网在线直播| 欧美午夜视频网站| 国产乱码字幕精品高清av | 一区二区三区中文字幕电影| 欧美日韩大陆在线| 色94色欧美sute亚洲线路二| zzijzzij亚洲日本少妇熟睡| 韩国成人精品a∨在线观看| 免费成人性网站| 日日夜夜精品视频免费| 日韩电影免费一区| 亚洲第一久久影院| 蜜桃av一区二区三区电影| 青青国产91久久久久久| 日本在线播放一区二区三区| 美女网站视频久久| 国产一区二区成人久久免费影院| 国产在线精品一区二区不卡了| 日韩高清不卡在线| 午夜a成v人精品| 久久久久国产成人精品亚洲午夜| 精品播放一区二区| 久久亚洲综合色一区二区三区| 国产午夜精品久久久久久久| 中文字幕av不卡| 精品1区2区在线观看| 91精品在线观看入口| 日韩免费视频线观看| 欧美男人的天堂一二区| 欧美在线啊v一区| 欧美日韩一区二区三区在线| 日韩欧美一区二区久久婷婷| 中文字幕精品在线不卡| 亚洲午夜影视影院在线观看| 视频一区二区欧美| 亚洲一二三四久久| 黑人巨大精品欧美黑白配亚洲| 成人免费视频网站在线观看| 欧美日韩日日摸| 国产女人18水真多18精品一级做| 亚洲国产成人91porn| 国产一区在线看| 欧美欧美欧美欧美首页| 成人免费在线视频观看| 免费在线看成人av| 91麻豆国产精品久久| 欧美成人午夜电影| 国产精品九色蝌蚪自拍| 九色综合国产一区二区三区| 在线观看免费成人| 中文字幕欧美日本乱码一线二线| 天天综合天天综合色| 成人精品一区二区三区四区 | 洋洋av久久久久久久一区| 黄页视频在线91| 69堂精品视频| 亚洲免费色视频| 成人av在线资源网站| 欧美大片国产精品| 日韩中文字幕亚洲一区二区va在线| 成人免费视频视频在线观看免费| 精品国产三级a在线观看| 亚洲国产另类av| 色综合色狠狠综合色| 中文乱码免费一区二区| 久久国产夜色精品鲁鲁99| 欧美日韩国产成人在线免费| 亚洲天堂成人网| 不卡一二三区首页| 国产精品天美传媒沈樵| 国产精品羞羞答答xxdd| 久久一二三国产| 国产成a人亚洲精品| 久久久久久久网| 国产在线精品一区在线观看麻豆| 日韩欧美国产综合在线一区二区三区 | 久久99久国产精品黄毛片色诱| 日韩三级在线观看| 日本美女一区二区三区视频| 欧美精品 日韩| 亚洲1区2区3区视频| 欧美高清视频www夜色资源网| 亚洲午夜久久久久久久久久久 | 在线免费观看日本欧美| 亚洲欧美日韩系列| 欧美影院午夜播放| 午夜视频一区二区三区| 88在线观看91蜜桃国自产| 热久久国产精品| 日韩欧美国产精品| 国产精品中文欧美| 国产精品成人免费精品自在线观看| 成人免费视频免费观看| 亚洲最新视频在线播放| 91.xcao| 国产精品自拍在线| 亚洲老妇xxxxxx| 欧美人xxxx| 国内精品久久久久影院色| 中文字幕+乱码+中文字幕一区| 色婷婷综合五月| 日本午夜精品视频在线观看| 久久午夜色播影院免费高清| 波多野结衣中文字幕一区| 亚洲国产精品天堂| 久久婷婷色综合| 色94色欧美sute亚洲线路二 | 日韩欧美一区二区在线视频| 国产精品1区2区3区| 亚洲免费色视频| 日韩视频一区二区三区| 色综合一个色综合| 精品一区二区三区免费观看| 国产精品视频yy9299一区| 欧美日韩精品一区二区在线播放| 国产一区二区精品久久| 亚洲视频一二区| 亚洲精品一区二区三区影院| 91丨九色丨黑人外教| 麻豆精品在线视频| 亚洲综合999| 日本一区二区免费在线| 制服丝袜激情欧洲亚洲| av电影在线观看不卡 | 久久伊99综合婷婷久久伊| 欧美亚洲国产一区二区三区va| 国产自产v一区二区三区c| 亚洲主播在线播放| 国产精品你懂的在线| 精品日韩成人av| 欧美肥大bbwbbw高潮| 一本色道久久综合狠狠躁的推荐| 国产在线视视频有精品| 视频一区二区欧美| 亚洲成人av一区二区| 成人免费视频在线观看| 国产欧美一区二区三区网站 | 国产黄色精品视频| 免费观看一级特黄欧美大片| 亚洲综合色在线| 国产精品高潮呻吟| 欧美经典三级视频一区二区三区| 日韩欧美卡一卡二| 欧美一级二级三级乱码| 欧美日韩精品二区第二页| 日本道色综合久久| 成人av资源站| 97久久超碰精品国产| 99精品1区2区| 91在线码无精品| 99久久综合国产精品| a美女胸又www黄视频久久| 丰满亚洲少妇av| 丁香婷婷综合五月| a级高清视频欧美日韩| av成人动漫在线观看| 97久久超碰精品国产| 欧洲亚洲国产日韩| 精品视频在线免费看| 欧美一区二区视频在线观看2022| 欧美成人在线直播| 久久午夜老司机| 国产网站一区二区三区| 国产精品视频第一区| 亚洲猫色日本管| 亚洲h精品动漫在线观看| 一区二区三区av电影| 日韩国产精品91| 九色综合狠狠综合久久| 懂色av中文字幕一区二区三区| 成人激情免费视频| 91亚洲国产成人精品一区二三| 日本久久一区二区| 日韩丝袜美女视频| 国产欧美日韩精品a在线观看| 国产精品国产三级国产| 亚洲成人综合视频| 美女性感视频久久| av色综合久久天堂av综合| 色噜噜夜夜夜综合网| 欧美一级黄色录像| 中文字幕精品三区| 午夜伊人狠狠久久| 国产精品亚洲一区二区三区妖精| 91论坛在线播放| 日韩一区和二区| 一色桃子久久精品亚洲| 亚洲成av人**亚洲成av**| 国产乱子伦一区二区三区国色天香| av高清不卡在线| 精品嫩草影院久久| 玉足女爽爽91| 国产一区二区导航在线播放| 精品视频999| 国产精品久久久久久久久快鸭|