std::strtok

来自cppreference.com
< cpp‎ | string‎ | byte
在标头 <cstring> 定义
char* strtok( char* str, const char* delim );

寻找 str 所指向的空终止字节字符串中的下个记号。由 delim 所指向的空终止字节字符串鉴别分隔字符。

此函数被设计为调用多次,以从同一字符串获得相继的记号。

  • str 不是空指针,则调用被当做 strtok 对此特定字符串的首次调用。函数搜索首个含于 delim 的字符。
  • 若找不到这种字符,则 str 中完全没有记号,而函数返回空指针。
  • 若找到这种字符,则它是记号的起始。然后函数从 delim 所含的首个字符的该点搜索。
  • 若找不到这种字符,则 str 只有一个记号,而将来对 strtok 的调用将返回空指针
  • 若找到这种字符,则用空字符 '\0' 替换它,并将指向下个字符的指针存储于静态位置,以为后继调用所用。
  • 然后函数返回指向记号起始的指针
  • str 为空指针,则将调用当做对 strtok 的后继调用,函数从先前调用中它剩下的位置开始。行为如同将先前存储的指针作为 str 传递。

参数

str - 指向要记号化的空终止字节字符串的指针
delim - 指向标识分隔符的空终止字节字符串的指针

返回值

指向下个记号起始的指针,或若无更多记号则为空指针。

注解

此函数是破坏性的:它写入 '\0' 字符于字符串 str 的元素。特别是,字符串字面量不能用作 strtok 的首参数。

每次对 strtok 的调用都会修改静态对象:它不是线程安全的。

不同于大多数其他记号化器, strtok 中的分隔符能对于后继记号不同,而且甚至能依赖于先前记号的内容。

示例

#include <cstring>
#include <iostream>
 
int main() 
{
    char input[100] = "A bird came down the walk";
    char *token = std::strtok(input, " ");
    while (token != NULL) {
        std::cout << token << '\n';
        token = std::strtok(NULL, " ");
    }
}

输出:

A
bird
came
down
the
walk

参阅

寻找任何来自分隔符集合的字符的首个位置
(函数)
返回仅由另一字节字符串中找不到的字符组成的最大起始段的长度
(函数)
返回仅由另一字节字符串中找到的字符组成的最大起始段的长度
(函数)