⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stringsearch2.cpp

📁 以2000年的人民日报为检索对象
💻 CPP
字号:
#include "stdio.h"
#include "string.h"
#include "io.h"



void main(int argc ,char *arg[]){
	unsigned short buffer;
	unsigned int Hz[0x10000],filelength,handle,keyStrlen,searchLeft,searchRight;
	FILE *fpInp,*fpKeywordInp,*fpResultout;
	for (unsigned int i=0;i<0x10000;i++) {
		Hz[i]=0;
	}
	fpInp=fopen("2000.txt","rb");
	if (fpInp==NULL) {
		printf("error in open file");
	}
	handle=_fileno(fpInp);
	filelength=(_filelength(handle))/2;
	fread(&buffer,sizeof(short),1,fpInp);
	for (unsigned int j=0;j<filelength;j++) {
		fread(&buffer,sizeof(short),1,fpInp);
		Hz[buffer]++;
	}
	rewind(fpInp);
	Hz[0]=0;
	for(i=1;i<0x10000;i++){
		Hz[i]=Hz[i]+Hz[i-1];
	}
	unsigned int *succ=new unsigned int[filelength]; 
	for (i=0;i<filelength;i++) {
		succ[i]=0;
	}
	fread(&buffer,sizeof(short),1,fpInp);
	for (i=0,j=0;i<filelength+1;i++,j=j+2) {
		fread(&buffer,sizeof(short),1,fpInp);
		Hz[buffer]--;
		succ[Hz[buffer]]=j;
	}

	fpKeywordInp=fopen("keyString.txt","rb");
	keyStrlen=_filelength(_fileno(fpKeywordInp))/2;
	unsigned short *keyword=new unsigned short[keyStrlen];
	fread(&buffer,sizeof(short),1,fpKeywordInp);
	for (i=0;i<keyStrlen;i++) {
		fread(&buffer,sizeof(short),1,fpKeywordInp);
		keyword[i]=buffer;
	}
	searchLeft=Hz[keyword[0]];
	unsigned int *SearchResult=new unsigned int[Hz[keyword[0]+1]-Hz[keyword[0]]];
	for (i=0;i<Hz[keyword[0]+1]-Hz[keyword[0]];i++) {
		SearchResult[i]=succ[searchLeft];
		searchLeft++;
	}
	for (i=0;i<keyStrlen-2;i++) {
		searchLeft=0; 
		searchRight=Hz[keyword[1+i]];
		while (searchRight<Hz[keyword[i+1]+1]&&searchLeft<Hz[keyword[0]+1]-Hz[keyword[0]]) {
			if (SearchResult[searchLeft]==0xffffffff) {
				searchLeft++;
				continue;
			}
			int	temp=succ[searchRight]-SearchResult[searchLeft];			
			if (temp>0) {
				if (succ[searchRight]-SearchResult[searchLeft]==2*(i+1)) {
					searchLeft++;
					searchRight++;			
				}
				else
					searchRight++;
			}	
			else{
				SearchResult[searchLeft]=0xffffffff;
				searchLeft++;	
			}
		}
	}
	unsigned short flag=0xfeff;
	fpResultout=fopen("searchresult.txt","wb");
	if(fpResultout==NULL)
		printf("error in open file");
	fwrite(&flag,sizeof(short),1,fpResultout);
	for (i=0;i<Hz[keyword[0]+1]-Hz[keyword[0]];i++) {
		if (SearchResult[i]!=0xffffffff) {
			unsigned int pos=SearchResult[i]-10;
			for(j=0;j<keyStrlen+10;j++){
					fseek(fpInp,pos,0);
					fread(&buffer,sizeof(short),1,fpInp);
					fwrite(&buffer,sizeof(short),1,fpResultout);
					pos=pos+2;
					
				}
				fputwc(13,fpResultout);
				fputwc(10,fpResultout);
			}
		else
			continue;
	}	
	fclose(fpKeywordInp);
	fclose(fpInp);
	fclose(fpResultout);
//	delete []succ;
//	delete []keyword;
//	delete []SearchResult;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -