c++基础之STL函数strtok以逗号和分号切割字符串为数字

前几天做头条笔试合并重复区间需要用到从带有逗号和分号的字符串中提取出数字

比如从字符串:  "1,10;32,45"中提取出数字1,10,32,45

需要用到STL 库函数strtok

使用如下:

c++基础之STL函数strtok以逗号和分号切割字符串为数字

c++基础之STL函数strtok以逗号和分号切割字符串为数字

c++基础之STL函数strtok以逗号和分号切割字符串为数字

需要注意的几点:

1、sscanf用来把指针指向的内容存到数组中

2、16行如果写成:char* s=str.c_str();不加char*强制转换的话会报错:

c++基础之STL函数strtok以逗号和分号切割字符串为数字

因为此时的str为字符串常量,在内存中为const char*,所以要强制转换为char *

可以通过尝试修改str内容来验证str为常量字符串

c++基础之STL函数strtok以逗号和分号切割字符串为数字

而直接初始化的string是可以修改的

c++基础之STL函数strtok以逗号和分号切割字符串为数字

3、strtok根据分号切割字符串为数字的核心代码为以下几行:

c++基础之STL函数strtok以逗号和分号切割字符串为数字

strtok(NULL,split1)返回上一次切割后的字符

比如”1,10;32,45“

那么char* p = strtok(s,split1)

p = strtok(NULL,split1)后p指向"32,45"

博客上有人说之所以是null是因为strtok内部用'\0'取代了分隔符