Решением является strtok () в string.h.
Вот хороший пример использования.
/* strtok example by mind@metalshell.com
*
* This is an example on string tokenizing
*
* 02/19/2002
*
* http://www.metalshell.com
*
*/
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int x = 1;
char str[]="this:is:a:test:of:string:tokenizing";
char *str1;
/* print what we have so far */
printf("String: %s\n", str);
/* extract first string from string sequence */
str1 = strtok(str, ":");
/* print first string after tokenized */
printf("%i: %s\n", x, str1);
/* loop until finishied */
while (1)
{
/* extract string from string sequence */
str1 = strtok(NULL, ":");
/* check if there is nothing else to extract */
if (str1 == NULL)
{
printf("Tokenizing complete\n");
exit(0);
}
/* print string after tokenized */
printf("%i: %s\n", x, str1);
x++;
}
return 0;
}
То, что сбивает с толку людей о strtok, - это когда вы в первый раз вызываете метод первым аргументом, передаваемым в указателе на строку, которую вы хотите маркировать, и при последующих вызовах вы передаете NULL. В своей реализации strtok использует статическую переменную для отслеживания того, откуда он должен начать поиск при последующих вызовах.
- Передав NULL, вы говорите strtok продолжить поиск с того места, где мы остановились в прошлый раз.
- Передача указателя! = NULL вы сообщаете токенизатору, что начинаете с начала новой строки, поэтому не обращайте внимания на информацию о предыдущем состоянии.