Преобразование Char в Int в c - PullRequest
       23

Преобразование Char в Int в c

0 голосов
/ 18 сентября 2011

Как я могу преобразовать символ в Int?

Это то, что я сделал до сих пор.

Спасибо

scanf("%s", str );

printf("str: %s\n", str);

int i;
if(isdigit(*str))
    i = (int) str;
else {
    i = 3;
}

контрольный пример

7
str: 7
i: 1606415584  

Ответы [ 5 ]

3 голосов
/ 18 сентября 2011

Редактировать: Я мог поклясться, что пост был помечен C ++ в начале. Я оставлю это на тот случай, если OP заинтересован в ответах на C ++ и изменение тега C было изменено.

Еще одна опция, которая может быть расширена с учетом вопроса, - это использовать boost :: lexical_cast следующим образом:

scanf("%s", str );

printf("str: %s\n", str);

int i = boost::lexical_cast<int>( str );

Я много использовал boost :: lexical_cast для преобразования между типами, главным образом, в строки и примитивы при чтении в пользовательских свойствах. Я считаю это бесценным ресурсом.

Стоит отметить, что boost :: lexical_cast может генерировать исключения, и они должны быть соответствующим образом обработаны при использовании вызова. Ссылка, которую я разместил в начале этого ответа, содержит всю необходимую для этого информацию.

2 голосов
/ 18 сентября 2011

Здесь вы смешиваете символьные и строковые понятия. str является строкой, а str[0] (что эквивалентно *str) является символом, первым символом этой строки.

Если вы хотите извлечь целое число из строки, попробуйте это

sscanf(str,"%d",&i);

Ваш

i = (int) str;

заставляет 4 байта, которые начинаются с одного и того же адреса памяти str (и для полноты, str является указателем), начинает интерпретироваться как целое число, и поэтому вы получаете полностью отключенный результат.

2 голосов
/ 18 сентября 2011

Если вы хотите проанализировать целое число из строки:

i = atoi(str);
1 голос
/ 18 сентября 2011
i = (int) str;

- неправильный способ преобразования строки в число, поскольку копируется переменная address в i (адрес, на который указывает str).

Вы можете попробовать это:

i = atoi(str);

или

sscanf(str,"%d",&i);

чтобы преобразовать вашу строку в число.

Обратите внимание, что вы не можете убедиться, что введенная строка является числовой, просто isdigit(*str), потому что она проверяет только первый символ строки.

Один из возможных способов:

int isNumeric = 1;
for(int j=0;j<length(str);j++)
   if( isdigit(str[j]) == false)
   {
      isNumeric = 0;
      break;
   }

if(isNumeric)
{
   // Code when the string is number 
   // (e.g. convert the string to a number with atoi function)
}
else
{
   // Code when the string is NOT number 
   // (e.g. show a error message)
}
1 голос
/ 18 сентября 2011

Вы можете преобразовать строки в int, используя sscanf

sscanf(str,"%d",&i);

http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/

...