C 语言 - 字符串操作 - strtok

说明

字符串分隔

函数原型

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 
#include 


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%s %s %s<\n",persons[j].name, persons[j].sex, persons[j].age);
    }

    return 0;
}

你可能感兴趣的:(C 语言 - 字符串操作 - strtok)