说明
字符串分隔
函数原型
char * strtok(char * s,const char * ct)
{
char *sbegin, *send;
sbegin = s ? s : ___strtok;
if (!sbegin) {
return NULL;
}
sbegin += strspn(sbegin,ct);
if (*sbegin == '\0') {
___strtok = NULL;
return( NULL );
}
send = strpbrk( sbegin, ct);
if (send && *send != '\0')
*send++ = '\0';
___strtok = send;
return (sbegin);
}
- s 被分隔的字符串,如果 s=NULL,使用__strok,这是一个定义在 string.h 中的全局变量,保存分隔剩余下来的值
- ct 分隔符,可以包含多个,例如:”,:|”
返回值
- 成功 返回指向分隔结果中第一个字符串,比如: str=“abc|123”, delim=“|”,返回值指向“abc”
- 不成功 NULL
例子
把"Fred male 25,John male 62,Anna female 16“中的人员信息分隔出来保存到 person 的结构体中
#include <stdio.h>
#include <string.h>
int main()
{
int i=0;
char buffer[200]="Fred male 25,John male 62,Anna female 16";
char *p=0;
char *tmp[3]={0};
char *buf = buffer;
struct person
{
char *name;
char *sex;
char *age;
};
struct person persons[3];
/*
* buf=strtok(NULL, ",") NULL 表示使用__strtok, 即分割剩下的部分
*/
for(buf=strtok(buffer,","); buf!=NULL; buf=strtok(NULL, ","))
{
tmp[i++] = buf;
}
for(int i=0; i<3; i++)
{
p = strtok(tmp[i]," ");
persons[i].name = p;
p = strtok(NULL," ");
persons[i].sex = p;
p = strtok(NULL," ");
persons[i].age = p;
}
for (int j=0; j<i; j++)
{
printf(">%s %s %s<\n",persons[j].name, persons[j].sex, persons[j].age);
}
return 0;
}