首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在c++中根据多个字符串分隔符拆分字符串

在c++中根据多个字符串分隔符拆分字符串
EN

Stack Overflow用户
提问于 2018-06-13 02:38:42
回答 1查看 198关注 0票数 2

我用C++98编写代码,只使用标准库。我正在尝试编写一些代码来将一个字符串拆分成多个子字符串,每个子字符串由字符串"OK“或字符串"ERROR”分隔。每个子字符串都应该放在mysubstring数组中。

这是我为单个分隔符编写的代码:

代码语言:javascript
复制
void split_string()
{
   for (unsigned short k=0;k<10;k++)
   {
      mysubstring[k]=""; //resetting all substrings
   }
   string separator = "OK";
   size_t pos = 0;
   unsigned short index=0;
   while ((pos = str_to_split.find(separator)) != std::string::npos) {
   mysubstring[index] = str_to_split.substr(0, pos);
   str_to_split.erase(0, pos + separator.length());
   index++;
}

这个单分隔符版本运行良好。然后我尝试升级到两个分隔符:

代码语言:javascript
复制
    void split_string()
    {
        for (unsigned short k=0;k<10;k++)
        {
            mysubstring[k]=""; //resetting all substrings
        }
        string okseparator = "OK";
        string koseparator = "ERROR";
        size_t  okpos = 0;
        size_t  kopos = 0;
        unsigned short index=0;
        while ((okpos = string_to_split.find(okseparator)) != std::string::npos)
       {
        while ((kopos = string_to_split.find(koseparator)) != std::string::npos)
          {
            if (okpos <= kopos)
            {
               mysubtring[index] = string_to_split.substr(0, okpos + okseparator.length());

               string_to_split.erase(0, okpos + okseparator.length());
               index++;
            }
            else
            {
                mysubstring[index] = string_to_split.substr(0, kopos + koseparator.length());
                string_to_split.erase(0, kopos + koseparator.length());
                index++;
            }
        }
    }

        while ((kopos = string_to_split.find(koseparator)) != std::string::npos)
        {
            mysubtring[index] = string_to_split.substr(0, kopos + koseparator.length());
            string_to_split.erase(0, kopos + koseparator.length());
            index++;
            }
}

这里的想法是,我留在第一个while循环中,直到所有的"OK“都被消耗完,然后进入最后一个while,结束剩下的所有"ERROR”。子字符串输入mysubstring数组的顺序应该与它们在string_to_split原始字符串中的顺序相同。

很遗憾,我不能让它工作,你能帮我吗?

用于测试和验证的示例:

代码语言:javascript
复制
#include <iostream>
#include <string.h>

void split_string();

string str_to_split = "skdjfnsdjknfjk OK    fkjsnfjksdnfjnsdjkfn ERROR skjdfnjksdnf OK sjkdnfjksdnfjERROR jnfjnsdjfnsjdknfjkn       OK";

use namespace std;
int main()
{
  split_string();
  return 0;
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50823737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档