受欢迎的博客标签

c++ strtok() 字符串分割函数

Published
C 库函数 - strtok()

 C 标准库 - <string.h>

描述

C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

声明

下面是 strtok() 函数的声明。

char *strtok(char *str, const char *delim)


参数
  • str -- 要被分解成一组小字符串的字符串。
  • delim -- 包含分隔符的 C 字符串。
返回值

该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。

实例

下面的实例演示了 strtok() 函数的用法。

实例

#include <string.h>
#include <stdio.h>
 
int main () {
   char str[80] = "This is - www.runoob.com - website";
   const char s[2] = "-";
   char *token;
   
   /* 获取第一个子字符串 */
   token = strtok(str, s);
   
   /* 继续获取其他的子字符串 */
   while( token != NULL ) {
      printf( "%s\n", token );
    
      token = strtok(NULL, s);
   }
   
   return(0);
}


让我们编译并运行上面的程序,这将产生以下结果:

This is 
 www.runoob.com 
 website

当strtok()在参数_Str的字符串中发现参数_Delim中包涵的分割字符时,则会将该字符改为\0 字符。

在第一次调用时,strtok()必需给予参数_Str字符串,往后的调用则将参数_Str设置成NULL。每次调用成功则返回指向被分割出片段的指针。

需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。

第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中。

实例
/将字符串"ab,cde,fghi"按照","分割。
char str[] = "ab,cde,fghi";
char *p[4];
p[0]= strtok(str, ",");
int i = 0;
while (p[i] != NULL)
{
    i++;
    p[i]= strtok(NULL, ",");
}
p[i] = "\0";
for (int i = 0; i < 4; i++)
{
    cout << p[i] << endl;
}
让我们编译并运行上面的程序,这将产生以下结果:
ab
cde
fghi



https://www.runoob.com/cprogramming/c-function-strtok.html
https://www.cnblogs.com/zhoudingcocng/p/6554418.html
http://www.cplusplus.com/reference/cstring/strtok/