1. 程式人生 > >C++ 字串的分割函式split 及 用法

C++ 字串的分割函式split 及 用法

之前在C#中總用到字串的分割,使用系統函式即可,比如:

string a = "This is a test";

string[] strArray = a.Split(' ');

在C++中string沒有直接的分割函式,可以利用C的stroke函式封裝一個分割方法:

vector<string> split(const string& str, const string& delim) {  
	vector<string> res;  
	if("" == str) return res;  
	//先將要切割的字串從string型別轉換為char*型別  
	char * strs = new char[str.length() + 1] ; //不要忘了  
	strcpy(strs, str.c_str());   

	char * d = new char[delim.length() + 1];  
	strcpy(d, delim.c_str());  

	char *p = strtok(strs, d);  
	while(p) {  
		string s = p; //分割得到的字串轉換為string型別  
		res.push_back(s); //存入結果陣列  
		p = strtok(NULL, d);  
	}  

	return res;  
} 

要利用分割函式時呼叫如下:

原string是其他C#專案的資料傳輸string

	string str1 = "M135buffer.buffer,|M135data.data1,4.22424|M135data.data6,-0.0714111|M135data.data7,-0.53833|M135data.data11,145.569|M135data.data16,5.0354|M135data.data17,-112.906|M135data.data21,4.34509|M135data.data22,-0.115356|M135data.data23,0|M135data.data24,-14|M135data.data25,49521|M135data.data_lng,0|M135data.data26,-14|M135data.data27,49521|M135data.data_lati,0";
	string str2 = "|This is a test!\n";

	string str = str1+str2;
	
	printf(str.c_str());
	
	vector<string> AllStr = split(str,"|");
	for (int i=0; i<AllStr.size();i++)
	{
		vector<string> tempStr = split(AllStr[i],",");
		if(tempStr.size()>=2)
		{
			printf("Name:%s  Value:%s\n",tempStr[0].c_str(),tempStr[1].c_str());
		}
	}

執行結果如下:


注意:

此split分割函式的第二個引數可以不只傳一個char,可以傳一個短string,但是函式會按照string中的每個char進行分割,

類似C#的分割函式的傳多個引數str.Split('|',',');

所以:這個分割函式只能按單個char或者多個單獨的char來分割,而不能按一個短string直接分割。