文章出处https://blog.csdn.net/glmushroom/article/details/80690881
之前在C#中总用到字符串的分割,使用系统函数即可,比如:
string a = "This is a test";
string[] strArray = a.Split(' ');
在C++中string没有直接的分割函数,可以利用C的stroke函数封装一个分割方法:
1 vector<string> split(const string& str, const string& delim) { 2 vector<string> res; 3 if("" == str) return res; 4 //先将要切割的字符串从string类型转换为char*类型 5 char * strs = new char[str.length() + 1] ; //不要忘了 6 strcpy(strs, str.c_str()); 7 8 char * d = new char[delim.length() + 1]; 9 strcpy(d, delim.c_str()); 10 11 char *p = strtok(strs, d); 12 while(p) { 13 string s = p; //分割得到的字符串转换为string类型 14 res.push_back(s); //存入结果数组 15 p = strtok(NULL, d); 16 } 17 18 return res; 19 }
要利用分割函数时调用如下:
原string是其他C#项目的数据传输string
1 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"; 2 string str2 = "|This is a test!\n"; 3 4 string str = str1+str2; 5 6 printf(str.c_str()); 7 8 vector<string> AllStr = split(str,"|"); 9 for (int i=0; i<AllStr.size();i++) 10 { 11 vector<string> tempStr = split(AllStr[i],","); 12 if(tempStr.size()>=2) 13 { 14 printf("Name:%s Value:%s\n",tempStr[0].c_str(),tempStr[1].c_str()); 15 } 16 }
运行结果如下:
注意:
此split分割函数的第二个参数可以不只传一个char,可以传一个短string,但是函数会按照string中的每个char进行分割,
类似C#的分割函数的传多个参数str.Split('|',',');
所以:这个分割函数只能按单个char或者多个单独的char来分割,而不能按一个短string直接分割。
————————————————
版权声明:本文为CSDN博主「glmushroom」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/glmushroom/article/details/80690881