第一种方法:通过使用strtok()函数实现 char *strtok(char *str, const char *delim); -
- string result="(123,qw34,789);(456,qwerr,908)"//需要分割的字符串
- std::vector<string>value;
- char* s_input = (char*)result1.c_str();
- const char* split = ";";// 以分号为分隔符拆分字符串
- char* ptr = NULL;
- char* p = strtok_s(s_input, split, &ptr);
- while (p != NULL)
- {
- value.push_back(p);
- p = strtok_s(NULL, split, &ptr);
- }
- for (int a = 0; a < value.size(); a++)
- {
- cout<<"第"<<a<<"个字符串:"<<value[a]<<endl;
- }
复制代码 封装成函数:
- std::vector<string> split(const string& str, const string& pattern)
- {
- //const char* convert to char*
- char* strc = new char[strlen(str.c_str()) + 1];
- strcpy(strc, str.c_str());
- std::vector<string> resultVec;
- char* tmpStr = strtok(strc, pattern.c_str());
- while (tmpStr != NULL)
- {
- resultVec.push_back(string(tmpStr));
- tmpStr = strtok(NULL, pattern.c_str());
- }
-
- delete[] strc;
-
- return resultVec;
- }
-
- int main()
- {
- string result1="(123,qw34,789);(456,qwerr,908)"//需要分割的字符串
-
- std::vector<string>value;
-
- value = split(result1, ");(");
- for (int a = 0; a < value.size(); a++)
- {
- cout<<"第"<<a<<"个字符串:"<<value[a]<<endl;
- }
- }
复制代码上面方法好像只适用于单字符分隔符。 第二种方法:以字符串为分割,比如要"),("substr函数
string substr ( size_t pos = 0, size_t n = npos ) const;
- void MySplit(const string& s, vector<string>& v, const string& c)
- {
- v.clear();
- string::size_type pos1 = 0, pos2 = s.find(c);
- while (string::npos != pos2)
- {
- v.push_back(s.substr(pos1, pos2 - pos1));
-
- pos1 = pos2 + c.size();
- pos2 = s.find(c, pos1);
- }
- if (pos1 != s.length())
- v.push_back(s.substr(pos1));
- }
-
- int main()
- {
- std::vector<string>value;
- MySplit(result1, value, ",(");
- for (int a = 0; a < value.size(); a++)
- {
- cout<<"第"<<a<<"个字符串:"<<value[a]<<endl;
- }
-
- }
复制代码
|