String tokenizer in c

2019-07-16 14:16发布

the following code will break down the string command using space i.e " " and a full stop i.e. "." What if i want to break down command using the occurrence of both the space and full stop (at the same time) and not each by themselves e.g. a command like: 'hello .how are you' will be broken into the pieces (ignoring the quotes) [hello] [how are you today]

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

2条回答
Evening l夕情丶
2楼-- · 2019-07-16 14:59

You can do it pretty easily with 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;
}

This is pretty much exactly the same as the implementation of strtok, just calling strstr and strlen instead of strcspn and strspn. It also might return empty tokens (if there are two consecutive delimiters or a delimiter at either end); you can arrange to ignore those if you would prefer.

查看更多
成全新的幸福
3楼-- · 2019-07-16 15:10

Your best bet might just be to crawl your input with strstr, which finds occurrences of a substring, and manually tokenize on those.

It's a common question you ask, but I've yet to see a particularly elegant solution. The above is straightforward and workable, however.

查看更多
登录 后发表回答