2013-04-15 3 views
1

Я пытаюсь Scanf слова и цифры из строки выглядит следующим образом: «привет, мир, я, 287876, 6,0» < - эта строка хранится в char массива (строки) что мне нужно сделать, это разделить вещи и распределить их по разным переменным, так что было бы, какsscanf, пока он не достигнет запятая

 char a = "hello" 
    char b = "world" 
    char c = "I" 
    unsigned long d = 287876 
    float e = 6.0 

Я знаю, что регулярный зсап прекращает чтение из стандартного ввода, когда она достигает белое пространство. Так я думал, что там может быть способ сделать sscanf прекратить чтение, когда он достигает «» (запятая)

Я исследовала библиотеку, чтобы найти формат для sscanf только для чтения алфавита и числа. Я не мог найти такую ​​вещь, может быть, мне стоит посмотреть еще раз.

Любая помощь? Заранее спасибо :)

+0

например) ' "% [^],% [^],% [^],% лу,% е"' – BLUEPIXY

+0

порядок ваших переменных в строке это фикс? Я имею в виду, что это всегда: 'string, string, char, int, float'? – MOHAMED

+0

Да, я думаю, что это сработает: «% [^,],% [^,],% [^,],% lu,% f" –

ответ

-1

Смотрите документацию для strtok и/или strtok_r

+0

'strtok_r' предназначен только для систем unix? –

+0

Я не уверен, что это так или нет - отсюда и «И/ИЛИ» в моем ответе. ** ЕСЛИ ** поддерживается символ 'strtok_r', он безопасен для потоков и рекурсии, а не глобальная функция состояния, как' strtok' - в любом случае ... один вариант 'strtok' или другой - это решение для проблема. –

+0

Для записи ... 'strtok_r' is' POSIX.1-2001' –

1

Этот пример использования strtok должен быть полезным:

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

int main() 
{ 
    char str[] ="hello, world, I, 287876, 6.0" ; 
    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; 
} 
7

Если порядок ваших переменных в строке является фикс, Я имею в виду, что это всегда:

string, string, string, int, float 

Использовать следующий спецификатор формата в sscanf():

int len = strlen(str); 
char a[len]; 
char b[len]; 
char c[len]; 
unsigned long d; 
float e; 

sscanf(" %[^,] , %[^,] , %[^,] , %lu , %lf", a, b, c, &d, &e); 
+0

Да, это то, что я делаю. Спасибо –

+0

Добро пожаловать – MOHAMED

+0

@MOHAMED: Как я могу сделать это для сканирования, пока он не соответствует определенной подстроке? – user2284570

Смежные вопросы