我正在尝试在C++中使用哈希来切换字符串,并使其工作。这段代码已经变成了我和它之间的个人问题,所以即使最终只有8个字符串要放在switch语句中,我也不想放弃并使用enum。
结合我在其他话题上看到的内容,我编写了这个非常简单且不太可靠的函数,但对于我想做的事情来说已经足够了,因为这并不是职业性质的。我的函数:
希望你们中的一些人能告诉我我哪里做错了...
结合我在其他话题上看到的内容,我编写了这个非常简单且不太可靠的函数,但对于我想做的事情来说已经足够了,因为这并不是职业性质的。我的函数:
constexpr long hashstr (const string &str, int h=0)
{
return !str[h] ? 55 : ( hashstr(str, h+1) *33) + (unsigned char)str[h];
}
我现在只是写了一个非常简单的主函数,然后调用它,但编译不过,提示我case是错误的(不是常量)。我不明白这个问题,因为我认为作为参数传入的字符串是一个常量,并且该函数返回一个常量表达式。
我的主函数:
int main (void) {
string teststr;
cout << "test string :::> ";
cin >> teststr;
int tt = hashstr(teststr);
cout << "res --> " << tt << endl;
switch ( hashstr(teststr) )
{
case hashstr("rosathefloridaturtle") :
cout << "ROSA OK" << endl;
break;
default:
cout << "ERROR" << endl;
break;
}
return EXIT_SUCCESS;
}
希望你们中的一些人能告诉我我哪里做错了...
hashstr
定义也不应该编译通过(至少在 gcc 中不会),因为字符串索引不是constexpr
,所以第二个错误是无关紧要的。 - vgrulh_strhash
。它是高效的,可以最小化字符串哈希的冲突(真的很好)。 - David C. Rankin