strtok_r使用方法

来源:互联网 发布:scala java 混合 编辑:程序博客网 时间:2024/06/08 10:26

      

       #include <string.h>


       char *strtok(char *str, const char *delim);


       char *strtok_r(char *str, const char *delim, char **saveptr);

       先讲解下strtok_r函数参数,参数一str是我们需要处理的字符串,delim是分隔符,saveptr则是指向每一次分割字符串时,第一个分隔符后面的位置,也就是我们下一次分隔字符串的起点。

       举例说明:

       我们要从字符串"helloworld <helloworld@qq.com>, strtoktest <strtoktest@qq.com>,paparazzi <paparazzi@163.com>"中提取出发件人的邮箱,而每个发件人之间由逗号','分隔了,因此分隔符应该为','。

#include<iostream>#include <string.h>#include <vector>#include <string>#include <stdio.h>#include <netinet/in.h>using namespace std;函数功能:提取邮箱参数:char * mailstr:待分析字符串,从<>中提取,若无<>则将mailstr整个返回;char* mail:指向提取出的邮箱返回值:无void getmail(char* mailstr, char* mail){    //"helloworld@china-telecom.com" <<span style="font-family: Arial, Helvetica, sans-serif;">helloworld@china-telecom.com</span><span style="font-family: Arial, Helvetica, sans-serif;">></span>    char* pbegin = NULL;    char* pend = NULL;    if(strlen(mailstr) == 0 )    {        strcpy(mail, "");        return;    }    pbegin = strchr(mailstr, '<');    pend = strchr(mailstr, '>');    if(pbegin == NULL || pend == NULL || pend < pbegin )    {        printf("pend:%s - pbegin:%s\n", pend , pbegin);        strcpy(mail, mailstr);        return;    }    strncpy(mail, pbegin+1, pend - pbegin -1);    mail[pend - pbegin -1] = '\0';    printf("mail = %s\n", mail);    return;}函数功能:提取收件人,并且多个收件人之间用;隔开参数:char * to:待分字符串;char* finalto:从to中提取出收件人,并用;连接后由finalto返回返回值:无void getto(char* to, char* finalto){    vector<string> store;    vector<string>::iterator itr;    char* pbegin;    char* pnext;    const char* delim = ",";    char* pTo;    char* p[4086];    char tmp[8192] = {0};    char finaltosingle[8192] = {0};    int in = 0;    strcpy(tmp, to);    pbegin = tmp;    while((p[in] = strtok_r(pbegin, delim, &pnext)) != NULL)    {        memset(finaltosingle, 0x0, sizeof(finaltosingle));        printf("in=%d\n", in);        printf("p[in]=%s\n",p[in]);        printf("pbefore=%s\n",pnext);        pTo = finaltosingle;        getmail(p[in], pTo);        printf("finaltosingle=%s\n", finaltosingle);        store.push_back(finaltosingle);        pbegin  = pnext;        in++;    }    for (itr = store.begin(); itr != store.end()-1; ++itr)    {        //cout<< *itr << endl;        printf("getto.(*itr).c_str()=%s\n",(*itr).c_str());        strcat(finalto, (*itr+';').c_str());    }    strcat(finalto,(*itr).c_str());    //cout << finalto << endl;    printf("getto.finalto=%s\n", finalto);}int main(){    char str[8192] = "helloworld <helloworld@qq.com>, strtoktest <strtoktest@qq.com>, <paparazzi paparazzi@163.com>";    char to[8192] = {0};    char finalto[8192] ={0};    strcpy(to, str);        getto(to, finalto);    //getmail(to, finalto);    cout << "finalto=" <<  finalto <<endl;    return 0;}


0 0
原创粉丝点击