5.散列-字符串hash
程序员文章站
2024-03-22 17:28:34
...
5.散列-字符串hash
1. 只有大写字母
/*
1. 只适用于所有大写字母 且 字符串不能太长
*/
#include <bits/stdc++.h>
using namespace std;
int hashlist(char s[],int len)
{
int id=0;
for(int i=0;i<len;i++)
{
id=id*26+(s[i]-'A'); //将26进制转换至10进制
}
return id;
}
int main()
{
char a[7]="xingly";
cout<<hashlist(a,6);
return 0;
}
2. 只有大写字母+小写字母
/*
2.只适用于大写小写字母 且 字符串不能太长
*/
#include <bits/stdc++.h>
using namespace std;
int hashlist(char s[],int len)
{
int id=0;
for(int i=0;i<len;i++)
{
if(s[i]>='A'&&s[i]<='Z') id=id*52+(s[i]-'A'); //将26进制转换至10进制
else if(s[i]>='a'&&s[i]<='z') id=id*52+(s[i]-'a')+26;
}
return id;
}
int main()
{
char a[7]="xinglZ";
cout<<hashlist(a,6);
return 0;
}
3. 只有大写字母+小写字母+数字[只有一个数字且在最后一位]——极易溢出
/*
3.适用于大小写字母+数字[数字确定在最后一位,且只有一个数字] *强烈建议不要使用 极易溢出
*/
#include <bits/stdc++.h>
using namespace std;
int hashlist(char s[],int len)
{
int id=0;
for(int i=0;i<len-1;i++)
{
if(s[i]>='A'&&s[i]<='Z') id=id*52+(s[i]-'A'); //将26进制转换至10进制
else if(s[i]>='a'&&s[i]<='z') id=id*52+(s[i]-'a')+26;
}
id=id*10+(s[len-1]-'0');
return id;
}
int main()
{
char a[5]="xil6";
cout<<hashlist(a,4);
return 0;
}
4. 只有大写字母+小写字母+数字[任意位置]——个人推荐
/*
4.适用于大小写字母+数字[数字可在任意位置,任意数量]
*/
#include <bits/stdc++.h>
using namespace std;
int hashlist(char s[],int len)
{
int id=0;
for(int i=0;i<len-1;i++)
{
if(s[i]>='A'&&s[i]<='Z') id=id*62+(s[i]-'A'); //将26进制转换至10进制
else if(s[i]>='a'&&s[i]<='z') id=id*62+(s[i]-'a')+26;
else if(isdigit(s[i])) id=id*62;
}
return id;
}
int main()
{
char a[5]="xil6";
cout<<hashlist(a,4);
return 0;
}