【发布时间】:2012-03-06 02:39:46
【问题描述】:
谁能告诉我如何轻松地将字符串中的每个字符转换为 ASCII 值,以便我可以对这些值求和? 我需要对哈希函数的值求和。
【问题讨论】:
谁能告诉我如何轻松地将字符串中的每个字符转换为 ASCII 值,以便我可以对这些值求和? 我需要对哈希函数的值求和。
【问题讨论】:
字符串中的每个字符都已经是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;
}
【讨论】:
要创建哈希,基本上只需要字符串中每个字符的整数值,而不需要 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;
}
最后,你仍然可以在没有 C++11 的情况下使用 std::accumulate 对字符串的元素求和:
#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;
}
【讨论】:
假设您的意思是std::string 或char*,您可以直接对字符求和,它们已经是ASCII 表示形式(与Java 或.net 中的Char 不同)。确保使用足够大的结果类型(至少int)。
另一方面,C++ 中应该有大量的字符串哈希函数,除非这是一个练习,否则你最好选择其中一个。
【讨论】:
将其转换为 int: 整数(单词[x])
【讨论】: