Разделить строку на слова несколькими разделителями

Обтекание try / catch вокруг конструктора суперкласса позволяет вам ловушки исключений, которые бросаются в конструктор суперкласса; однако исключение автоматически восстанавливается при завершении блока catch, и исключение продолжает распространяться.

В конце концов, суперкласс не строился. Это заставило исключение. Таким образом, вы не можете продолжать свой веселый путь, в конструкторе подкласса, а затем закончите с построенным подклассом, но с суперклассом, который не строился. Это не имеет никакого смысла.

Из http://en.cppreference.com/w/cpp/language/function-try-block :

Основной целью функции-try-blocks является регистрация или изменение, а затем восстановление данных, исключенных из списка инициализаторов членов в конструкторе. Они редко используются с деструкторами или с регулярными функциями.

blockquote>

Это действительно основная добавленная функциональность блоков try-try: удобное место для регистрации «эй, эта функция породила исключение» , который охватывает всю функцию, единственное место для регистрации такого рода вещей, но не затрагивает обычную обработку исключений.

30
задан Baum mit Augen 7 December 2016 в 23:15
поделиться

2 ответа

Пользование библиотекой диапазона-v3 Eric Niebler:

https://godbolt.org/z/ZnxfSa

#include <string>
#include <iostream>
#include "range/v3/all.hpp"

int main()
{
    std::string s = "user1:192.168.0.1|user2:192.168.0.2|user3:192.168.0.3";
    auto words = s  
        | ranges::view::split('|')
        | ranges::view::transform([](auto w){
            return w | ranges::view::split(':');
        });
      ranges::for_each(words, [](auto i){ std::cout << i  << "\n"; });
}
1
ответ дан 27 November 2019 в 21:59
поделиться

Используя std::regex

А std::regex может сделать строковое разделение в нескольких строках:

std::regex re("[\\|,:]");
std::sregex_token_iterator first{input.begin(), input.end(), re, -1}, last;//the '-1' is what makes the regex split (-1 := what was not matched)
std::vector<std::string> tokens{first, last};

Попытка это самостоятельно

1
ответ дан 27 November 2019 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: