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
- strtok_r使用方法
- strtok_r
- strtok_r
- strtok strtok_r
- strtok_r用法
- strtok_r函数
- strtok strtok_r
- strtok_r使用
- 函数 strtok_r
- strtok,strtok_r
- strtok_r测试代码
- [copy]strtok()和strtok_r()
- strtok和strtok_r
- strtok与strtok_r源码
- strtok and strtok_r
- strtok和strtok_r
- strtok_r函数研究
- strtok和strtok_r
- hdu_2150(几何判断线段相交,水题)
- 友元函数
- 解决input设置line-height不居中的兼容性问题
- Jquery如何查看表单是否改变
- 编程之美之买书问题理解和c语言程序
- strtok_r使用方法
- git是什么?如何使用git进行团队协作?
- 【maven 架构】 pom.xml 配置详解
- 在anaconda python开发套件下进行opencv的安装
- hdu 5475 An easy problem(线段树单点更新)
- mysql 的存储过程
- android中LayoutParams
- Java IO - PipedOutputStream & PipedInputStream
- XTU 程序设计实践模拟考试题1