Преобразовать символ в целое число в C ++ - PullRequest
2 голосов
/ 07 марта 2012

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

    int hashCode(string s)
{
   int Sum = 0;
   for(int i=0; i<strlen(s); i++)
   {
      Sum += (int)s[i];
   }
   return Sum;
}

Ответы [ 6 ]

13 голосов
/ 07 марта 2012

Да - в C и C ++ char - это просто маленький целочисленный тип (обычно в диапазоне от -128 до +127). Когда вы выполняете математику, она обычно автоматически конвертируется в int, поэтому вам даже не нужен ваш состав.

Кроме того, вы действительно не хотите использовать strlen(s) внутри условия остановки для цикла for. По крайней мере, с большинством компиляторов это заставит его переоценивать strlen(s) каждую итерацию, поэтому ваш линейный алгоритм просто стал квадратичным.

size_t len = strlen(s);

for (int i=0; i<len; i++)
    Sum += s[i];

Или, если s на самом деле std::string, как предполагает тип параметра:

for (int i=0; i<s.size(); i++)
    Sum += s[i];

Пока еще одна возможность:

Sum = std::accumulate(s.begin(), s.end(), 0);
4 голосов
/ 07 марта 2012

Символы обычно представлены внутри целыми числами, поэтому s[i] может быть назначено целому числу.

Если у вас есть char '1' и вы хотите сохранить int 1, тогда вы можете сделать s[i]-'0'.

1 голос
/ 07 марта 2012

Возможно, вы ищете

Sum += s[i] - '0';

Для общего случая преобразования чисел в строки и наоборот см. эту запись FAQ .

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

Функция, которую вы ищете: sscanf .

Вы найдете его в заголовке stdio.h, и оно определено так

int sscanf ( const char * str, const char * format, ...);

В вашем случае вы бы использовали это так:

string str = "SomeStringWithNumbers";
int s, len;
len = str.length();
for(int i = 0; i < len; i++ )
{
    int status = sscanf( str[i], "%d", &s);
    // Check status if necessary 
 }

Если ваша строка не состоит только из желаемого целого числа, вам нужно адаптировать параметры. Затем вы можете изменить первый параметр, чтобы он указывал непосредственно на ту часть строки, где находится ваш номер, или вы должны адаптировать строку формата. Также вам следует проверить возвращаемое значение.

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

Вы можете использовать strtol или, поскольку это было помечено как C ++, строковый поток.

string myStream = "45";
istringstream buffer(myString);
int value;
buffer >> value; 
0 голосов
/ 07 марта 2012

И ответ (я думаю)

int i = atoi("5")

Кстати, atoi для ascii в Integer.

Возможно, поддержка Cat Plus Plus atoi не поддерживается.Так что лучше не используйте его;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...