Hash去除重复字符串:
#include <iostream> #include <windows.h> #include <random> #include <time.h> using namespace std; #define MAX 10000 #define MOD 9991 char * Hash[MAX][20]; int len[MAX]; int _hash(char *str){ register int hash=0; while(int ch=(int)*str++){ //hash=hash*31+ch; hash=hash<<7+hash<<1+hash+ch; hash%=MOD; } return hash%MOD; } void Test()//测试程序 { //freopen("C:\\in.txt","r",stdin); FILE *fp1=fopen("C:\\a.txt","r"); FILE *fp2=fopen("C:\\b.txt","w"); char str[20]; memset(len,0,sizeof(len)); while(~fscanf(fp1,"%s",str)){ int pos=_hash(str); bool flag=false; for(int i=0;i<len[pos];i++){ if(strcmp(str,Hash[pos][i])==0){ flag=true; break; } } if(!flag){ Hash[pos][len[pos]]=new char[20]; int i=0; while(str[i]!=‘\0‘){ Hash[pos][len[pos]][i]=str[i]; i++; } Hash[pos][len[pos]++][i]=‘\0‘; fprintf(fp2,"%s ",str); } } fclose(fp1); fclose(fp2); } int main(void) { LARGE_INTEGER BegainTime ; LARGE_INTEGER EndTime ; LARGE_INTEGER Frequency ; QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&BegainTime) ; //要测试的代码放在这里 Test(); QueryPerformanceCounter(&EndTime); //输出运行时间(单位:s) cout << "运行时间(单位:s):" <<(double)( EndTime.QuadPart - BegainTime.QuadPart )/ Frequency.QuadPart <<endl; //system("pause") ; return 0 ; }
原文:http://blog.csdn.net/starcuan/article/details/19034185