Я пишу свой код на C ++ 98, используя только стандартные библиотеки.Я пытаюсь написать некоторый код для разделения строки на несколько подстрок, каждая из которых ограничена строкой «ОК» или строкой «ОШИБКА».Каждая подстрока должна быть помещена в массив mysubstring.
Это код, который я написал для одного разделителя:
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++;
}
Эта версия с одним разделителем работает нормально.Затем я попытался обновить до двух разделителей:
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++;
}
}
Идея здесь заключается в том, что я остаюсь в первом цикле, пока не израсходуется все «ОК», затем он входит в последнее время, чтобы завершить все ».ОШИБКА "слева.Подстроки должны входить в массив mysubstring в том же порядке, в котором они находятся в исходной строке string_to_split.
К сожалению, я не могу заставить его работать, не могли бы вы помочь мне?
Пример для проверки ипроверить:
#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;
}