由一个任意长度字符串生成唯一的32位整数
Lu核心库的输出函数StrToUniInt可将一个任意长度字符串转换成一个唯一的32位整数(只要没有对Lu进行重新初始化,该整数值就唯一);反过来,函数UniIntToStr接受一个32位整数,返回与之对应的字符串。
例子:
仅需要以下支持文件:
1、头文件lu32.h。
2、导入库lu32.lib。
3、核心库lu32.dll。
#include <windows.h>
#include <iostream>
#include <time.h>
#include "lu32.h"
#pragma comment( lib, "lu32.lib" )
using namespace std;
void main(void)
{
char Str1[]="abcd"; //字符串
char Str2[]="f(x,y)=x+y"; //字符串
char *pStr;
luVOID k1,k2,kk,i,j,k;
clock_t t0;
if(!InitLu()) return; //初始化Lu
k1=StrToUniInt(Str1,strlen(Str1)); //由字符串Str1获得一个唯一的整数
k2=StrToUniInt(Str2,strlen(Str2)); //由字符串Str2获得一个唯一的整数
cout<<"k1="<<k1<<" k2="<<k2<<endl;
k1=StrToUniInt(Str1,strlen(Str1)); //由字符串Str1获得一个唯一的整数
k2=StrToUniInt(Str2,strlen(Str2)); //由字符串Str2获得一个唯一的整数
cout<<"k1="<<k1<<" k2="<<k2<<endl;
pStr=UniIntToStr(k1,kk); //由整数k1获得字符串
if(pStr) cout<<pStr<<endl;
pStr=UniIntToStr(k2,kk); //由整数k2获得字符串
if(pStr) cout<<pStr<<endl;
t0=clock(); //测试效率
for(k=0;k<10;k++)
{
for(i=1;i<256;i++)
{
Str1[1]=i; Str2[3]=i; //变换字符串
for(j=1;j<256;j++)
{
Str1[2]=j; Str2[4]=j; //变换字符串
k1=StrToUniInt(Str1,strlen(Str1));
k2=StrToUniInt(Str2,strlen(Str2));
pStr=UniIntToStr(k1,kk);
pStr=UniIntToStr(k2,kk);
}
}
}
cout<<"耗时 "<<(clock()-t0)/1000.0<<" 秒。"<<endl;
cin.get();
FreeLu(); //释放Lu
}
结果:
k1=4297048 k2=4299496
k1=4297048 k2=4299496
abcd
f(x,y)=x+y
耗时 3.046 秒。