C语言:strtok函数小结
来源:互联网 发布:上汽大众 知乎 编辑:程序博客网 时间:2024/05/23 17:08
C语言:strtok函数小结
前几天第一次用strtok函数来分割字符串,看了一些该函数的示例,有一些困惑。为什么第一次传入的数组名,第二次传入NULL。经过摸索后,终于明白strtok函数是怎么个用法了。
个人觉得,主要原因是strtok函数的源码中使用了static变量。本人找不到源码,于是自己写一个功能相同的函数,代码如下:
char *mystrtok( char *input,const char *str){
static char *move=NULL;
char *save_input;
int i,j,len;
if(input!=NULL)
move=input;
if(*move=='\0')
save_input=NULL;
else save_input=move;
len=strlen(str);
while(*move!='\0'){
for(i=0;i<len;i++){
if(str[i]==*move){
*move='\0';
move++;
return save_input;
}
}
move++;
}
return save_input;
}顺带一提,strtok函数中的第二个参数是为分隔符字符串,该字符串中的所有字符(除了'\0'外)都将成为分隔符,并用'\0'来替换。举个例子:
strtok(input, "bd");中的第二个参数是"bd",则”bd"中的'b'、'd’都成为分隔符,当字符数组input中遇到'b'或者'd'时,就用'\0'来替换。该函数用一次,替换一次。
strtok函数的实现方式大致如下:
(1)当第一个参数不为NULL时,从输入的字符串的首地址开始查找分隔符,找到分隔符,替换成'\0',然后移动下一个字符,作为下一次的起始查找位置,最后返回本次查找的起始查找地址,因为第一次是从字符串的首地址开始,故第一次返回该字符串的首地址,如果第一次查找便找不到分隔符,则查找会停在字符串末尾的'\0'处,然后返回字符串的首地址。
(2)若第一个参数为NULL,则从上一次查找后停在的位置开始,继续查找,查找方式和(1)相同。所以,第一次用strtok函数时第一个参数不能为NULL,否则会由于内存不可读而报错。
(3)若某一次(除去第1次)查找开始时,第一个字符便是'\0',则返回NULL。
- C语言:strtok函数小结
- C语言strtok函数
- c语言:strtok()函数
- C语言函数strtok
- C语言之strtok函数
- c语言strtok函数用法
- C语言 strtok函数使用
- C语言 strtok函数使用
- C语言字符串拆分函数strtok
- C语言分割字符串函数strtok
- C语言字符串拆分函数strtok
- C语言分割字符串strtok函数
- C 语言 分割字符串 strtok函数
- c 语言字符处理函数 strtok strstep
- C语言strtok函数的用法
- c语言字符串分割函数(strtok())
- C语言<string.h>之strtok函数
- C语言strtok()函数:字符串分割
- 密码的正则表达式
- hdu-3593-The most powerful force
- OCP-1Z0-053-200题-102题-38
- CF 149D - Coloring Brackets(区间Dp)
- Qt应用
- C语言:strtok函数小结
- OCP-1Z0-053-200题-101题-212
- HDU 2224 The shortest path
- js中innerHTML,innerText,outerHTML的用法和区别
- 解决Cisco VPN Client Reason 442: Failed to Enable Virtual Adapter
- 高负载下Nginx,Node.JS和网络的优化
- ANTLR 选项,动作
- 机房收费系统之软件需求说明书
- OCP-1Z0-053-200题-100题-69