Преобразование части символа * в int - PullRequest
1 голос
/ 08 декабря 2011

Я пытаюсь преобразовать часть символа * в int. Например, если пользователь вводит «шаг 783». Я хочу конвертировать 783 в int.

char buffer[100];
char* input = fgets(buffer, sizeof buffer, stdin)
int i = input[5] - '0'; //assume location 5 is where the number will start
printf("%i", i);

Прямо сейчас, этот код просто печатает первое число ('7').

Ответы [ 7 ]

3 голосов
/ 08 декабря 2011

Вы можете использовать обычные функции преобразования, начиная с нужной позиции:

int i = atoi(input + 5);
long int j = strtol(input + 5, NULL, 0);

Второй, strtol(), особенно полезен, если вы хотите узнать, где число заканчивается (через второй параметр см. Руководство ).

1 голос
/ 08 декабря 2011

Если перед номером всегда есть пробел и всегда слова равны двум, например, «шаг 123».

ниже приведен код, который работает.

int main ()
{
  char str[] ="tring 7532";
  char *pch1,*pch2;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch1 = strtok (str," ");
  pch2= strtok (NULL, " ");
  int a=strtol(pch2,(char **)NULL,10);

  printf ("the number is: %d\n",a);

return 0;
}

264> ./a.out
Splitting string "tring 7532" into tokens:
the number is: 7532
0 голосов
/ 08 декабря 2011
char *p;
int i;
p = strchr(input, ' ');
i = atoi(p);
0 голосов
/ 08 декабря 2011

Технически вы можете использовать один из предложенных методов, но может случиться так, что вам понадобится какой-то синтаксический анализатор, если вы хотите действительно надежную обработку.

Вы должны проверить, есть ли у вас ключевое слово «шаг», затем пробел, а затем число в допустимом формате для ввода.

Например: что если пользователь введет просто «s 1» вместо"шаг 1".Вы хотите начать чтение после окончания ввода?Или если он введет «шаг [пробел] [пробел] -2342344234234234233333» и т. Д.

0 голосов
/ 08 декабря 2011

Вы должны перейти от начала к концу и проверить, соответствует ли оно цифре ascii, затем преобразовать ее в цифру

    int digit = 0; i = 0;
    while(input[i] != '\0'){
     if(input[i] >= 48 && input[i] <= 57){

       int temp = input[i] - '0';
       digit  = digit*10 + temp;

     }
    i++;
    }
printf("%i", digit);
0 голосов
/ 08 декабря 2011

Потому что вы просто конвертируете первую цифру.

если это всегда трехзначное число:

int i = 100 * int(input[5] - '0') + 10 * int(input[5] - '0') + int(input[5] - '0')
0 голосов
/ 08 декабря 2011

Вы плохо определяете, что имеете в виду часть строки? Всегда ли это 6-й символ индекса 5?

Вы можете использовать strtol , atoi или, возможно, sscanf

...