целочисленное извлечение из строки - PullRequest
0 голосов
/ 21 октября 2011

У меня есть строка входного аргумента const char* s Я знаю, что она запускает последовательность символов, представляющих целые числа, эта последовательность может иметь любую длину, включая 0. После последовательности целых чисел следует последовательность символов, которые не являются целочисленными,например "23meeting","1h".Есть ли какая-нибудь (встроенная) функция C, которая может извлечь целое число?Например, для «23meeting» может быть выполнена такая операция:

int x = needed_function("23meeting"); //results x = 23

Спасибо

Ответы [ 5 ]

2 голосов
/ 21 октября 2011

Вы можете перебрать строку и дать условие для получения чисел

num=0;
for(i=0;str[i]!='\0';i++) {
if(str[i]>=48 && str[i]<=57)
 num=num*10+(str[i]-48);
  printf("\n%d",num);
} 
1 голос
/ 21 октября 2011

Попробуйте atoi() или полный strtol():

int x = atoi("23meeting");
int x = (int)strtol("23meeting", (char **)NULL, 10);

Проверьте справочные страницы в вашей системе (раздел 3 в Unix).

1 голос
/ 21 октября 2011

Одним из способов будет использование sscanf:

char *str = "23meeting";
unsigned x;
sscanf(str, "%u", &x);
printf("%u\n", x);

Однако для дополнительной проверки ошибок вам придется выполнить некоторые дополнительные проверки вручную.

1 голос
/ 21 октября 2011

atoi () должен нормально работать для этого. Он должен останавливаться на первом нечисловом символе.

int x = atoi("23meeting")

РЕДАКТИРОВАТЬ: комментарий подразумевает, что atoi () не является потокобезопасным или устарел от языка. Здесь обсуждается потокобезопасность этой функции:

Почему OSX документирует atoi / atof как не поддерживающую потоки?

Может ли кто-нибудь предоставить ссылку на то, что atoi не является поточно-ориентированным?

И, насколько я могу судить, atoi () в C99, который является последним стандартом (7.20.1.2).

0 голосов
/ 21 октября 2011

atoi() должен делать то, что вы хотите, хотя более надежная реализация будет использовать strtol().

...