Разбить строку на слова, при разделителе больше одного символа

Как реализовать функцию, которая бы возвращала указатель на массив строк, чтобы при этом разделитель мог быть как строкой, так и символом? Для строк можно использовать только массив char. Например строку "Hello world" разбить по разделителю "o w", чтобы в итоге получился массив {"Hell","orld"}


Ответы (2 шт):

Автор решения: Andrej Levkovitch

С помощью regex и токен итераторов это делается элементарным образом:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <regex>
#include <string>

using StringList = std::list<std::string>;

StringList splitString(const std::string &str, const std::string &delimiter) {
  StringList retval;
  std::regex regDelim{delimiter};

  for (std::sregex_token_iterator iter{str.begin(), str.end(), regDelim, -1};
       iter != std::sregex_token_iterator{}; ++iter) {
    retval.emplace_back(iter->str());
  }

  return retval;
}

int main() {
  std::string str = "hello world";

  StringList list = splitString(str, "o w");

  for (const std::string &out : list) {
    std::cout << out << std::endl;
  }
}
→ Ссылка
Автор решения: DSuhoi

Самый простой способ - использование функции strtok():

int main ()
{
    char str[] = "Hello, world";
    char delim[] = "ow";
    char * pch = strtok (str,delim); 

    while (pch != NULL)                        
    {
        printf("%s", pch);
        pch = strtok (NULL, delim);
    }
  return 0;
}
→ Ссылка