Извлечь число из Char * Array (C-String) - PullRequest
2 голосов
/ 25 октября 2011

У меня есть строка в следующем формате:

.word 40

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

Как мне извлечь число?

Спасибо

Ответы [ 6 ]

8 голосов
/ 25 октября 2011

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

Демонстрация в Интернете:

    #include <stdio.h>
    #include <string.h>

    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 () для преобразования его в числовое значение.

3 голосов
/ 25 октября 2011

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

1 голос
/ 25 октября 2011
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');

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

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

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

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

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

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

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

char* string = ".word 40";
char number[5];
unsigned int length = strlen(string);
strcpy(number, string + length - 2);
0 голосов
/ 25 октября 2011
int foo;
scanf("%*s %d", &foo);

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

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