c++ 使用某个特定字符或者字符串分割另外一个字符串

c++ c++ 1278 人阅读 | 0 人回复

发表于 2023-4-23 14:07:45 | 显示全部楼层 |阅读模式

第一种方法:通过使用strtok()函数实现

char *strtok(char *str, const char *delim);

  1.    
  2.     string result="(123,qw34,789);(456,qwerr,908)"//需要分割的字符串
  3.     std::vector<string>value;
  4.     char* s_input = (char*)result1.c_str();
  5.         const char* split = ";";// 以分号为分隔符拆分字符串
  6.         char* ptr = NULL;
  7.         char* p = strtok_s(s_input, split, &ptr);
  8.         while (p != NULL)
  9.         {
  10.                 value.push_back(p);
  11.                 p = strtok_s(NULL, split, &ptr);
  12.         }
  13.         for (int a = 0; a < value.size(); a++)
  14.         {
  15.                 cout<<"第"<<a<<"个字符串:"<<value[a]<<endl;
  16.         }
复制代码
封装成函数:
  1. std::vector<string> split(const string& str, const string& pattern)
  2. {
  3.         //const char* convert to char*
  4.         char* strc = new char[strlen(str.c_str()) + 1];
  5.         strcpy(strc, str.c_str());
  6.         std::vector<string> resultVec;
  7.         char* tmpStr = strtok(strc, pattern.c_str());
  8.         while (tmpStr != NULL)
  9.         {
  10.                 resultVec.push_back(string(tmpStr));
  11.                 tmpStr = strtok(NULL, pattern.c_str());
  12.         }

  13.         delete[] strc;

  14.         return resultVec;
  15. }

  16. int main()
  17. {
  18.     string result1="(123,qw34,789);(456,qwerr,908)"//需要分割的字符串

  19.     std::vector<string>value;
  20.    
  21.         value = split(result1, ");(");
  22.         for (int a = 0; a < value.size(); a++)
  23.         {
  24.                 cout<<"第"<<a<<"个字符串:"<<value[a]<<endl;
  25.         }
  26. }
复制代码

上面方法好像只适用于单字符分隔符。

第二种方法:以字符串为分割,比如要"),("

substr函数
string substr ( size_t pos = 0, size_t n = npos ) const;


  1. void MySplit(const string& s, vector<string>& v, const string& c)
  2. {
  3.   v.clear();
  4.   string::size_type pos1 = 0, pos2 = s.find(c);
  5.   while (string::npos != pos2)
  6.   {
  7.     v.push_back(s.substr(pos1, pos2 - pos1));

  8.     pos1 = pos2 + c.size();
  9.     pos2 = s.find(c, pos1);
  10.   }
  11.   if (pos1 != s.length())
  12.     v.push_back(s.substr(pos1));
  13. }

  14. int main()
  15. {
  16.     std::vector<string>value;
  17.         MySplit(result1, value, ",(");
  18.         for (int a = 0; a < value.size(); a++)
  19.         {
  20.                 cout<<"第"<<a<<"个字符串:"<<value[a]<<endl;
  21.         }
  22.   
  23. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则