1. 程式人生 > >c++分割字串

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; 
}

在這裡插入圖片描述