一、strtok的使用
函数原型:char *strtok(char *s, char *delim)
先把测试代码放上;
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
char str[] = "aaa bbb ccc ddd";
char pattern[] = " ";
char *res = strtok(str, pattern);
while (res != NULL)
{
printf("%s\n", res);
res = strtok(NULL, pattern);
}
return 0;
}
基本上这个函数就是这么用的,然后解释一下为什么这个函数这么用:
首先:char *res = strtok(str, pattern);为什么放这样一句在这儿,返回值又是什么东西?这是值得学习的,在使用完这句话后,原来的字符串会发生一些改变:在这句话执行完毕之后,原来的字符串str发生了改变,因为该方法首先去找在str中跟pattern适配的字符 (空格),然后将第一个空格修改为了'/0',然后返回的字符串res实际上就等于"aaa\0"。
然后,在循环体while中,res = strtok(NULL, pattern);然后这里strtok方法的第一个参数一定要放NULL,至于为什么要放NULL,这里就不深深究了,具体想了解的去看源码吧。
注意点:
- 使用该函数会对原来的字符串进行修改,所以不能在
strtok函数的第一个参数中传一个字符常量! - 注意该函数的匹配项的使用原则:一般来说,匹配项
pattern一般只是一个符号,如果出现多个符号,就极有可能出错,原因是:包含在pattern中的字符均可以作为分隔符,而非严格匹配。可以把pattern理解为分隔符的集合。 - 如果字符串第一个就是匹配项,如
src = ",aaa,bbb,ccc";,pattern = ",",那么strtok在使用的时候会自动跳过第一个匹配项,从字符串后一位开始匹配
本文主要参考博主:关于函数strtok和strtok_r的使用要点和实现原理(一)
本文介绍了C++中函数的使用,给出函数原型和测试代码,解释函数用法及返回值,说明使用该函数会修改原字符串,不能传字符常量,还提到匹配项使用原则,若字符串首为匹配项会自动跳过,最后给出参考博客。
1万+

被折叠的 条评论
为什么被折叠?



