关闭

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

标签: C++
713人阅读 评论(0) 收藏 举报
分类:

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

#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;
				else
					s[-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;
			else
				break;
		}
		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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:78739次
    • 积分:1548
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:2篇
    • 译文:15篇
    • 评论:17条
    最新评论