用下面示例说明strtok函数的各种用法的关键点
1、用strtok函数分割字符串后,原字符串被修改
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char send_str[600]={0};
char nr[10][20]={0};
char *p;
int i=0;
strcpy(send_str,",aaa,bbb,ccc");
puts(send_str);
p=strtok(send_str,",");
while(p!=NULL)
{
strcpy(nr[i],p);
puts(nr[i]);
i++;
p = strtok(NULL, ",");
}
puts(send_str);
return 0;
}
输出结果:
aaa,bbb,ccc,
aaa
bbb
ccc
aaa
说明:strtok函数是把字符串中分割分割符替换为0,也就是字符串的结束符
2、strtok函数直接跳过字符串首部直接为分割字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char send_str[600]={0};
char nr[10][20]={0};
char *p;
int i=0;
strcpy(send_str,",aaa,bbb,ccc,");
puts(send_str);
p=strtok(send_str,",");
while(p!=NULL)
{
strcpy(nr[i],p);
puts(nr[i]);
i++;
p = strtok(NULL, ",");
}
puts(send_str);
return 0;
}
输出结果:
,aaa,bbb,ccc,
aaa
bbb
ccc
,aaa
说明:字符串首部正好为分割符时,strtok函数直接跳过
3、字符串尾部有没有分割符,都可以分割尾部字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char send_str[600]={0};
char nr[10][20]={0};
char *p;
int i=0;
strcpy(send_str,",aaa,bbb,ccc");
puts(send_str);
p=strtok(send_str,",");
while(p!=NULL)
{
strcpy(nr[i],p);
puts(nr[i]);
i++;
p = strtok(NULL, ",");
}
puts(send_str);
return 0;
}
输出结果:
,aaa,bbb,ccc
aaa
bbb
ccc
,aaa
4、分隔符为多个字符时,即为字符串时,源字符串被分割字符串中任意一个字符分割
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char send_str[600]={0};
char nr[10][20]={0};
char *p;
int i=0;
strcpy(send_str,"aaa,bbb,;ccc;ddd");
puts(send_str);
p=strtok(send_str,",;");
while(p!=NULL)
{
strcpy(nr[i],p);
puts(nr[i]);
i++;
p = strtok(NULL, ",;");
}
puts(send_str);
return 0;
}
输出结果:
aaa,bbb,;ccc;ddd
aaa
bbb
ccc
ddd
aaa
5、strtok函数不能嵌套使用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char send_str[600]={0};
char nr[10][20]={0};
char *p,*p1;
int i=0;
strcpy(send_str,"aaa,bbb;ccc,ddd");
puts(send_str);
p=strtok(send_str,";");
while(p!=NULL)
{
p1=strtok(p,",");
while(p1!=NULL)
{
strcpy(nr[i],p1);
puts(nr[i]);
i++;
p1 = strtok(NULL, ",");
}
p = strtok(NULL, ";");
}
puts(send_str);
return 0;
}
输出结果:
aaa,bbb;ccc,ddd
aaa
bbb
aaa
说明:strtok函数的第一个参数不为NULL,strtok函数开始分割这个字符串,执行后,strtok内部会保存一个指针,这个指针指向这个字符串找到这个分割符后面第一个字符,如果下次调用strtok函数的第一个参数为NULL,strtok会从保存的这个指针开始查找分割符