字符串分割的c++实现方式


一边遍历一边分割:

<span style="white-space:pre">	</span>// split -> vector

	std::vector<Point> points;
	
	std::string lo = "2,1 2,2 2,4 4,3 ";
	for (int p1 = 0, p2 = 0; (p2 = lo.find(" ", p1 + 1)) >= 0; p1 = p2)
	{
		std::string sub = lo.substr(p1, p2);
		{
			int x = 0;
			int y = 0;
			sscanf(sub.c_str(), "%d,%d", &x, &y);
			
			points.push_back( Point(x,y) );
		}
	};


方法1:

	char str[] = "a,b,c,d*e";
	const char * seprator = ",";
	char * p = strtok(str, seprator);
	while (p)
	{
		CCLOG("%s\n", p);
		p = strtok(NULL, seprator);
	}


方法2:
void strSplit(std::string str, const char* seprator, std::vector<std::string>& strs_out);


void SceneBattleField::strSplit(std::string str, const char* seprator, std::vector<std::string>& strs_out)
{
	int pos = 0;
	int pos_start = 0;
	int seplen = strlen(seprator);

	do
	{
		pos = str.find(seprator, pos_start);
		if (pos > 0)
			strs_out.push_back(str.substr(pos_start, pos - pos_start));
		else
			strs_out.push_back(str.substr(pos_start));
		pos_start = pos + seplen;

	} while (pos > 0);
}

std::string strSplitAt(std::string str, const char* seprator, int index);

// 字符串分割,直接获取某个分割位上的字符。index从0开始
std::string strSplitAt(std::string str, const char* seprator, int index)
{
	std::string strRet = "";

	int pos = 0;
	int pos_start = 0;
	int seplen = strlen(seprator);

	int i = 0;
	do
	{
		pos = str.find(seprator, pos_start);

		if (i == index)
		{
			if (pos > 0)
				strRet = str.substr(pos_start, pos - pos_start);
			else
				strRet = str.substr(pos_start);
		}

		pos_start = pos + seplen;
		i++;
	} while (pos > 0);

	return strRet;
}


调用例子:

	char * str = "a,*b,*c,*d*e";

	std::vector<std::string> strs;
	strSplit(str, ",*", strs);

	std::string str2 = strSplitAt(str, ",*", 0);


[0] 0x9bf21c
[1] 0x9bf55c




你可能感兴趣的:(C++)