函数
<cstring>

strtok

char * strtok ( char * str, const char * delimiters );
将字符串分割成标记
一系列对该函数的调用将 str 分割成标记,这些标记是由 delimiters 中的任何字符分隔的连续字符序列。

第一次调用时,该函数期望 str 参数是一个 C 字符串,其第一个字符被用作扫描标记的起始位置。在后续调用中,该函数期望一个空指针,并使用前一个标记结束后的位置作为新的扫描起始位置。

为了确定标记的开始和结束,该函数首先从起始位置扫描第一个 **不** 包含在 delimiters 中的字符(这成为 标记的开始)。然后从这个 标记的开始 开始扫描第一个包含在 delimiters 中的字符,这成为 标记的结束。当找到终止的 空字符 时,扫描也会停止。

这个 标记的结束 被自动替换为 **空字符**,而 标记的开始 由函数返回。

一旦在调用 strtok 时找到 str 的终止空字符,所有后续的(以空指针作为第一个参数的)调用都将返回一个空指针。

上一个标记找到的位置由函数内部保留,以便在下次调用时使用(特定的库实现不必避免数据争用)。

参数

str
要截断的 C 字符串。
请注意,此字符串将被修改,分割成更小的字符串(标记)。
或者,可以指定一个空指针,在这种情况下,函数将继续扫描先前成功调用函数后结束的位置。
delimiters
包含分隔符字符的 C 字符串。
这些字符可以从一次调用到下一次调用而不同。

返回值

如果找到标记,则返回指向标记开头的指针。
否则,返回 空指针
当在正在扫描的字符串中达到字符串的末尾(即遇到空字符)时,总是返回 空指针

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}

输出

Splitting string "- This, a sample string." into tokens:
This
a
sample
string


另见