C++ 以多字符为分隔符分割字符串

来源:互联网 发布:btob 知乎 编辑:程序博客网 时间:2024/04/28 06:10

发现,之前写的博客中,有一种分割方式是在是有点落后.因此改进了一下,这里主要是第一个函数,百度中可以查到.

#include <iostream>#include <vector>#include <string>using namespace std;char *strsep(char **stringp, const char *delim){//判断stringp是否为空,提高程序的容错性char *s;const char *spanp;int c, sc;char *tok;if ((s = *stringp)== NULL)return (NULL);for (tok = s;;) {c = *s++;spanp = delim;do {if ((sc =*spanp++) == c) {if (c == 0)s = NULL;elses[-1] = 0;*stringp = s;return (tok);}} while (sc != 0);}}void pushToVec(std::vector<std::string>&obj,const char *param,std::string token){char *p = (char*)param;char *key_point;while(p){while ( key_point = strsep(&p,token.c_str()))//关键字为c或d,它们连续出现了{//函数遇到token时,key_point指向token返回if (*key_point == 0)continue;elsebreak;}if (key_point)obj.push_back(key_point);}}int main(){vector<string> obj;string test("145,456,789,rtyy,http:www.baidu.com;");string token(",:.;");//使用","号,":"号,"."号,";"做分隔符pushToVec(obj,test.c_str(),token);for (size_t i = 0;i< obj.size();i++){cout<<obj[i]<<endl;}return 0;}

char *strsep(char **stringp, const char *delim)
是用来分割的主要函数,pushTOVec函数仅仅是做了一个封装,将分割后的字符放到一个vector中用来看分割的效果,其实直接打印出来也可以.该函数可以传入多个分割字符,也可以只传入一个.

可以对比一下这个,我早些时候写的:http://blog.csdn.net/wangshiqilin_fjy/article/details/40982417

0 0