有人能告诉我如何轻松地将字符串中的每个字符转换为ASCII值,以便我可以对这些值求和吗? 我需要对哈希函数的值求和。
答案 0 :(得分:11)
字符串中的每个字符都是ascii:
#include <string>
int main() {
int sum = 0;
std::string str = "aaabbb";
for (unsigned int i = 0; i < str.size(); i++) {
sum += str[i];
}
return 0;
}
答案 1 :(得分:3)
要创建哈希,基本上只需要字符串中每个字符的整数值而不是ASCII值。它们是两个非常不同的东西。 ASCII是一种编码。您的字符串也可能是UTF-8编码,这仍然意味着您的字符串以单个NULL结尾,但每个字符可能占用超过1个字节。无论哪种方式,perreal的解决方案都是您想要的。但是,我把它写成一个单独的答案,因为你确实需要理解编码和存储类型之间的区别,这是一个char。
值得一提的是,使用C + 11时,标准库中内置了一个哈希函数。这就是你如何使用它。
#include <string>
#include <iostream>
#include <functional>
int main() {
const std::string str = "abcde";
std::cout << std::hash<std::string>()(str) << std::endl;
return 0;
}
最后,你仍然可以使用std :: accumulate来汇总没有C ++ 11的字符串元素:
#include <string>
#include <iostream>
#include <numeric>
int main() {
//0x61+0x62+0x63+0x64+0x65=0x1ef=495
const std::string str = "abcde";
std::cout << std::accumulate(str.begin(),str.end(),0) << std::endl;
return 0;
}
答案 2 :(得分:0)
假设您的意思是std::string
或char*
,您可以直接对字符求和,它们已经是ASCII表示形式(与Java或.net中的Char
相对)。请务必使用足够大的结果类型(至少int
)。
另一方面,C ++中的字符串应该有很多哈希函数,除非这是一个练习,你最好选择其中一个。
答案 3 :(得分:-1)
将其转换为int: INT(字[X])