欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}


TIP:个人推荐 1、2、4方法

相关标签: 入门篇-算法初步