Строковый токенизатор в C


Следующий код разбивает строковую команду с помощью пробела, т. е. "" и полной остановки, т. е. "."Что делать, если я хочу разбить команду, используя появление как пространства, так и полной остановки (в то же время), а не каждый сам по себе, например, команду типа:" Привет .how are you ' будет разбит на куски (игнорируя кавычки) [привет] [как ты сегодня]

char *token2 = strtok(command, " .");
2 2

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. Он также может возвращать пустые маркеры (если есть два последовательных разделителя или разделитель на любом конце); вы можете игнорировать их, если хотите.

Лучше всего было бы просто обойти входные данные с помощью strstr, который находит вхождения подстроки, и вручную маркировать их.

Это обычный вопрос, который вы задаете, но я еще не видел особенно элегантного решения. Однако вышесказанное является простым и выполнимым.