Строковый токенизатор в c - PullRequest
2 голосов
/ 21 августа 2011

следующий код будет разбивать строковую команду, используя пробел, т. Е. "" И полный останов, т. Е. "."Что если я захочу разбить команду, используя одновременно пробел и точку (одновременно), а не каждую из них отдельно, например, команда типа: «привет. Как дела» будет разбита на части (игнорируяцитаты) [привет] [как дела сегодня]

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

Ответы [ 2 ]

3 голосов
/ 21 августа 2011

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

3 голосов
/ 21 августа 2011

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

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

...