Парсинг строки

у меня есть строка формата "ABCDEFG, 12:34:56:78:90:11". я хочу разделить эти два значения, которые разделяются запятыми в две различных строки. как я делаю это в gcc использование языка C.

6
задан Ben Zotto 22 April 2010 в 23:08
поделиться

6 ответов

Одна из возможностей выглядит примерно так:

char first[20], second[20];

scanf("%19[^,], %19[^\n]", first, second);
7
ответ дан 8 December 2019 в 17:19
поделиться
char str[] = "ABCDEFG,12:34:56:78:90:11"; //[1]

char *first = strtok(str, ",");  //[2]
char *second = strtok(NULL, "");  //[3]

[1]  ABCDEFG,12:34:56:78:90:11  

[2]  ABCDEFG\012:34:56:78:90:11
     Comma replaced with null character with first pointing to 'A'

[3]  Subsequent calls to `strtok` have NULL` as first argument.
     You can change the delimiter though.

Note: you cannot use "string literals", because `strtok` modifies the string.
3
ответ дан 8 December 2019 в 17:19
поделиться

Так много людей предлагают strtok ... Почему? strtok - это пережиток каменного века программирования и годится только для 20-строчных утилит!

Каждый вызов strtok изменяет strToken, вставляя нулевой символ после токена, возвращенного этим вызовом. [...] [F] функция использует статическую переменную для разбора строки на токены. [...] Чередование вызовов этой функции с большой вероятностью приведет к повреждению данных и неточным результатам.

scanf , как и в ответе Джерри Коффина , является гораздо лучшей альтернативой.Или вы можете сделать это вручную: найдите разделитель с помощью strchr , затем скопируйте части в отдельные буферы.

3
ответ дан 8 December 2019 в 17:19
поделиться

Попробуйте использовать следующее regex найдет что угодно с символами az AZ, за которыми следует ","

"[AZ] ," если вам тоже нужны строчные буквы, попробуйте "[a-zA-Z] ,"

Если вам нужно сначала найти вторую часть, вы можете попробовать следующее

", [0-9] {2}: [0-9] {2}: [0-9] {2}: [ 0-9] {2}: [0-9] {2}: [0-9] {2} "

Пример использования REGEX есть в http: / / ddj.com / 184404797

Спасибо, V $ h3r

-1
ответ дан 8 December 2019 в 17:19
поделиться

Вы можете использовать strtok , который позволит вам указать разделитель и сгенерировать токены для вас.

1
ответ дан 8 December 2019 в 17:19
поделиться

Вы можете использовать strtok :

Пример с cppreference.com :

 char str[] = "now # is the time for all # good men to come to the # aid of their country";
 char delims[] = "#";
 char *result = NULL;
 result = strtok( str, delims );
 while( result != NULL ) {
     printf( "result is \"%s\"\n", result );
     result = strtok( NULL, delims );
 }
1
ответ дан 8 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: