Функции strtok () и strtok_r () в C с примерами
C предоставляет две функции strtok () и strtok_r () для разделения строки по некоторому разделителю. Разделение строки - очень распространенная задача. Например, у нас есть список элементов из файла, разделенных запятыми, и нам нужны отдельные элементы в массиве.
strtok ()
// Разбивает str [] в соответствии с заданными разделителями. // и возвращает следующий токен. Это нужно назвать // в цикле, чтобы получить все токены. Возвращает NULL // когда токенов больше нет. char * strtok (char str [], const char * delims);
// AC/C++ program for splitting a string // using strtok() #include <stdio.h> #include <string.h> int main() { char str[] = "Geeks-for-Geeks" ; // Returns first token char * token = strtok (str, "-" ); // Keep printing tokens while one of the // delimiters present in str[]. while (token != NULL) { printf ( "%s
" , token); token = strtok (NULL, "-" ); } return 0; } |
Выход:
Компьютерщики для Компьютерщики
strtok_r ()
Как и функция strtok () в C, strtok_r () выполняет ту же задачу по синтаксическому анализу строки на последовательность токенов. strtok_r () - это реентерабельная версия strtok ()
Есть два способа вызвать strtok_r ()
// The third argument saveptr is a pointer to a char * // variable that is used internally by strtok_r() in // order to maintain context between successive calls // that parse the same string. char *strtok_r(char *str, const char *delim, char **saveptr);
Ниже приведена простая программа на C, демонстрирующая использование strtok_r ():
// C program to demonstrate working of strtok_r() // by splitting string based on space character. #include <stdio.h> #include <string.h> int main() { char str[] = "Geeks for Geeks" ; char * token; char * rest = str; while ((token = strtok_r(rest, " " , &rest))) printf ( "%s
" , token); return (0); } |
Выход:
Компьютерщики для Компьютерщики
Другой пример strtok:
// C code to demonstrate working of // strtok #include <stdio.h> #include <string.h> // Driver function int main() { // Declaration of string char gfg[100] = " Geeks - for - geeks - Contribute" ; // Declaration of delimiter const char s[4] = "-" ; char * tok; // Use of strtok // get first token tok = strtok (gfg, s); // Checks for delimeter while (tok != 0) { printf ( " %s
" , tok); // Use of strtok // go through other tokens tok = strtok (0, s); } return (0); } |
Выход:
Компьютерщики для выродки Делать вклад
Практическое применение
strtok можно использовать для разделения строки на несколько строк на основе некоторых разделителей. С помощью этой функции можно реализовать простую поддержку файла CSV. В файлах CSV в качестве разделителей используются запятые.
// C code to demonstrate practical application of // strtok #include <stdio.h> #include <string.h> // Driver function int main() { // Declaration of string // Information to be converted into CSV file char gfg[100] = " 1997 Ford E350 ac 3000.00" ; // Declaration of delimeter const char s[4] = " " ; char * tok; // Use of strtok // get first token tok = strtok (gfg, s); // Checks for delimeter while (tok != 0) { printf ( "%s, " , tok); // Use of strtok // go through other tokens tok = strtok (0, s); } return (0); } |
Выход:
1997, Ford, E350, ac, 3000.00,
Ссылка:
1) страница руководства strtok_r ()
2) http://stackoverflow.com/questions/15961253/c-correct-usage-of-strtok-r
Эта статья предоставлена MAZHAR IMAM KHAN и shantanu_23. Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.