5.散列-字符串hash

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方法

发布了7 篇原创文章 · 获赞 7 · 访问量 138

猜你喜欢

转载自blog.csdn.net/xg987599519/article/details/103960793
今日推荐