Конвертировать каждый символ в строке в ASCII - PullRequest
3 голосов
/ 06 марта 2012

Может ли кто-нибудь сказать мне, как легко преобразовать каждый символ в строке в значение ASCII, чтобы я мог суммировать значения?Мне нужно суммировать значения для хэш-функции.

Ответы [ 4 ]

11 голосов
/ 06 марта 2012

Каждый символ в строке уже 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;
}
3 голосов
/ 06 марта 2012

Чтобы создать хеш, вам нужно только целочисленное значение каждого символа в строке, а не значение 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 :: аккумуляцию:

#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;
}
0 голосов
/ 06 марта 2012

Преобразуйте его в int: Int (слово [х])

0 голосов
/ 06 марта 2012

Предположим, вы имеете в виду std::string или char*, вы можете напрямую суммировать символы, они уже находятся в ASCII-представлении (в отличие от Char в Java или .net). Обязательно используйте достаточно большой тип результата (int как минимум).

С другой стороны, должно быть множество хеш-функций для строк в C ++, если только это не упражнение, вам лучше выбрать один из них.

...