у меня есть строка формата "ABCDEFG, 12:34:56:78:90:11". я хочу разделить эти два значения, которые разделяются запятыми в две различных строки. как я делаю это в gcc использование языка C.
Одна из возможностей выглядит примерно так:
char first[20], second[20];
scanf("%19[^,], %19[^\n]", first, second);
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.
Так много людей предлагают strtok
... Почему? strtok
- это пережиток каменного века программирования и годится только для 20-строчных утилит!
Каждый вызов strtok изменяет strToken, вставляя нулевой символ после токена, возвращенного этим вызовом. [...] [F] функция использует статическую переменную для разбора строки на токены. [...] Чередование вызовов этой функции с большой вероятностью приведет к повреждению данных и неточным результатам.
scanf
, как и в ответе Джерри Коффина , является гораздо лучшей альтернативой.Или вы можете сделать это вручную: найдите разделитель с помощью strchr
, затем скопируйте части в отдельные буферы.
Попробуйте использовать следующее 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
Вы можете использовать strtok , который позволит вам указать разделитель и сгенерировать токены для вас.
Вы можете использовать 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 );
}