c++分割字符串

由于C++中没有C#中对字符串Split的操作,最近string使用频率比较高,写了以下两种对字符串进行以想要的切割方式切割。

将字符串分割并转换成对应的进制数

int StringToSystem(string &str, vector<int> &strItem, char TypeName,int System)
{
	int tIndex = 0;
	int tTemp;
	if (str == "")
	{
		return tIndex;
	}
	if (str.find(TypeName) == string::npos)
	{
		tTemp = strtoul(str.c_str(), NULL, System);
		strItem.push_back(tTemp);
		tIndex++;
		return tIndex;
	}
	auto endPos = str.find(TypeName);
	auto strLength = str.size();
	while (endPos != string::npos)
	{
		tIndex++;
		string Item = str.substr(0, endPos);
		tTemp = strtoul(Item.c_str(), NULL, System);
		strItem.push_back(tTemp);
		strLength = strLength - endPos;
		str = str.substr(endPos + 1, strLength);
		endPos = str.find(TypeName);
		if (endPos == string::npos)
		{
			tTemp = strtoul(str.c_str(), NULL, System);
			strItem.push_back(tTemp);
			tIndex++;
		}
	}
	return tIndex;

}

将字符串分割存入容器中

int StringToArray(string str, vector<string > &strItem,char TypeName)
{
	int tIndex = 0;
	if (str=="")
	{
		return tIndex;
	}
	if (str.find(TypeName) == string::npos)
	{
		strItem.push_back(str);
		tIndex++;
		return tIndex;
	}
	auto endPos = str.find(TypeName);
	auto strLength = str.size();
	while (endPos!=string::npos)
	{
		tIndex++;
		string Item = str.substr(0, endPos);
		strItem.push_back(Item);
		strLength = strLength - endPos;
		str = str.substr(endPos + 1, strLength);
		endPos = str.find(TypeName);
		if (endPos == string::npos)
		{
			strItem.push_back(str);
			tIndex++;
		}
	}
	return tIndex;
}

测试:

int main()
{
	string strName = "my name is Neilyo!";
	vector<string> strItem;
	int tlen1 = StringToArray(strName, strItem, ' ');
	for (int i = 0; i < tlen1; i++)
		std::cout << strItem[i]<<std::endl;
	string strTest = "11-22-33-44-55-66-77-88-99-156-200";
	vector<int> tItem;
	int tlen2 = StringToSystem(strTest, tItem, '-',10);
	for (int i = 0; i < tlen2; i++)
		std::cout << tItem[i] << std::endl; 
}

在这里插入图片描述