Intereting Posts
Сколько страниц памяти используют компиляторы C на настольных ОС для обнаружения переполнения стека? Ошибка сегментации с правильной установкой ulimit как генерировать случайное число от 0,5 до 1,0 Как печатать f size_t без предупреждения в mingw-w64 gcc 7.1? Является ли область в C связанной только с компиляцией времени, так как мы знаем, что мы можем получить доступ к любой памяти во время выполнения? OS X: Как я могу получить путь к каталогу рабочего стола на macOS? SSE-байты и своп-слово Является ли (TRUE) хорошей идеей в C? Вызов метода Rust из C с параметрами массива Переполнение буфера – SegFaults у обычного пользователя объединение упакованных данных с выравненным доступом к памяти ANSI C: стандартное определение размера строк __DATE__ и __TIME__? Ctrl + D не останавливает выполнение приложения в окне команд Является ли доступ к статически или динамически распределенной памяти быстрее? OSX FSEventStreamEventFlags работает неправильно

Извлечение числа из Char * Array (C-String)

У меня есть строка, которая встречается в этом формате:

.word 40

Я хотел бы извлечь целую часть. Целочисленная часть всегда отличается, но строка всегда начинается с .word . У меня есть функция токенизатора, которая работает на все, кроме этого. Когда я помещаю .word (.word с пробелом) в качестве разделителя, он возвращает null.

Как я могу извлечь номер?

Спасибо

Вы можете использовать sscanf для извлечения форматированных данных из строки. (Он работает так же, как scanf, но считывает данные из строки вместо стандартного ввода)

Вы можете использовать strtok (), чтобы извлечь две строки с пробелом в качестве разделителя.

Демо-версия:

  #include  #include  int main () { char str[] =".Word 40"; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," "); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " "); } return 0; } 

Выход:

 Splitting string ".Word 40" into tokens: .Word 40 

Если вы хотите, чтобы число 40 как числовое значение, а не строка, вы можете использовать atoi () для преобразования его в числовое значение.

Проверьте строку с помощью

 strncmp(".word ", (your string), 6); 

Если это возвращает 0, ваша строка начинается с «.word», и вы можете посмотреть (свою строку) + 6, чтобы перейти к началу номера.

 char str[] = "A=17280, B=-5120. Summa(12150) > 0"; char *p = str; do { if (isdigit(*p) || *p == "-" && isdigit(*(p+1))) printf("%ld ", strtol(p,&p,0); else p++; }while(*p!= '\0'); 

Этот код записывает в консоли все цифры.

 int foo; scanf("%*s %d", &foo); 

Звездочка сообщает scanf не хранить строку, которую она читает. Используйте fscanf, если вы читаете файл, или sscanf, если вход уже находится в буфере.

Быстро и грязно:

 char* string = ".word 40"; char number[5]; unsigned int length = strlen(string); strcpy(number, string + length - 2);