我已经写了一些代码投const char*来int使用constexpr,因此我可以使用const char*作为一个模板参数.这是代码:
#include <iostream>
class conststr
{
public:
template<std::size_t N>
constexpr conststr(const char(&STR)[N])
:string(STR), size(N-1)
{}
constexpr conststr(const char* STR, std::size_t N)
:string(STR), size(N)
{}
constexpr char operator[](std::size_t n)
{
return n < size ? string[n] : 0;
}
constexpr std::size_t get_size()
{
return size;
}
constexpr const char* get_string()
{
return string;
}
//This method is related with Fowler–Noll–Vo hash function
constexpr unsigned hash(int n=0, unsigned h=2166136261)
{
return n …Run Code Online (Sandbox Code Playgroud) 感兴趣的领域是字符串匹配.假设我有这样的结构.
typedef struct
{
char *name,
int (*function)();
} StringArray
StringArray s[] =
{
{"George", func1},
{"Paul", func2},
{"Ringo", func3},
{"John", func4},
{"", NULL} /* End of list */
}
Run Code Online (Sandbox Code Playgroud)
数组中有固定数量的字符串.它们是硬编码的,如示例中所示.如果表发生变化,则需要重新评估散列函数的质量.
我想将哈希函数应用于字符串,如果字符串与数组中的字符串匹配,则调用该函数.这需要一个完美的哈希函数.不允许冲突.要求散列的目的是在查找上获得O(1)性能.
您在设计功能时有什么想法?
我正在创建一个脚本,其中包含名称和电子邮件地址列表,并发送一封电子邮件邀请他们注册我们部门的安全网站.名称和电子邮件列表可在同一站点的公共页面上找到.我需要一种方法来为他们提供一个唯一的令牌,当他们按照电子邮件中的链接注册帐户时会识别他们.用户只会使用一次令牌,以创建帐户并设置其初始密码.
什么是生成令牌的最佳方法?存储在数据库中的随机字符串?从用户信息和一些盐生成的哈希?别的什么?我知道这种方法的安全性取决于个人电子邮件邀请的隐私,这是我理解的一点点.
我已经使用hashCode()了StringAPI的方法,它为以下代码生成的值为99162322:
String str = "hello";
System.out.println(str.hashCode());
Run Code Online (Sandbox Code Playgroud)
是否有任何Java API可以生成仅5位数字(63346)的哈希值,例如下面的Oracle SQL?
select ORA_HASH('hello','99999') from dual --63346
Run Code Online (Sandbox Code Playgroud)