很抱歉可能是一个愚蠢的问题,但在阅读了大量的例子后,我仍然不明白strtok()
的工作原理。
以下是示例:
char s[] = " 1 2 3"; // 3 spaces before 1
int count = 0;
char* token = strtok(s, " ");
while (token != NULL) {
count++;
token = strtok(NULL, " ");
}
执行count
等于3.为什么?
请解释一下,我已经详细介绍了该函数调用中发生的事情。
答案 0 :(得分:1)
由于:
http://man7.org/linux/man-pages/man3/strtok.3.html
From the above description, it follows that a sequence of two or more
contiguous delimiter bytes in the parsed string is considered to be a
single delimiter, and that delimiter bytes at the start or end of the
string are ignored.
您也可以打印连续的令牌。 输出给我: 1 2 3
答案 1 :(得分:0)
它是C,但C ++参考有一个很好的例子:http://www.cplusplus.com/reference/cstring/strtok/
char s[]
初始化后,指向包含数据的内存位置:1 2 3
。
首先调用strtok
,使用单个空格分隔符,使指针前进指向进一步的内存循环,现在只需:1 2 3
。进一步调用会增加指针,指向连续令牌的位置。
注意:将strtok()
视为一个tokenizer函数,由有效标记向前迭代。此外,打印出pch
的当前值可能有助于更好地理解它(或使用调试器)。