Строковый токенизатор в C
Следующий код разбивает строковую команду с помощью пробела, т. е. "" и полной остановки, т. е. "."Что делать, если я хочу разбить команду, используя появление как пространства, так и полной остановки (в то же время), а не каждый сам по себе, например, команду типа:" Привет .how are you ' будет разбит на куски (игнорируя кавычки) [привет] [как ты сегодня]
char *token2 = strtok(command, " .");
2 ответа:
Вы можете сделать это довольно легко с помощью
strstr
:char *strstrtok(char *str, char *delim) { static char *prev; if (!str) str = prev; if (str) { char *end = strstr(str, delim); if (end) { prev = end + strlen(delim); *end = 0; } else { prev = 0; } } return str; }
Это в значительной степени точно так же, как реализация
strtok
, просто вызываяstrstr
иstrlen
вместоstrcspn
иstrspn
. Он также может возвращать пустые маркеры (если есть два последовательных разделителя или разделитель на любом конце); вы можете игнорировать их, если хотите.