удалить суффикс строк в диапазоне v3 - PullRequest
0 голосов
/ 25 февраля 2020

Я разбиваю две строки на std :: vector по пробелам, удаляю дубликаты и сортирую их. После этого я хотел бы объединить каждый вектор в один непрерывный диапазон с пробелами в качестве разделителя. При использовании диапазонов v3 это работает с помощью views::join(' '). В качестве предварительной обработки я хотел бы удалить общий префикс и суффикс двух диапазонов. Прямо сейчас я определяю prefix_len, используя (упрощенная версия без сортировки и дедупликации):

#include <vector>
#include <range/v3/all.hpp>
#include <string_view>

int main() {

    std::string_view a = "hello world";
    std::string_view b = "hello beautiful world";

    auto a_words = a
        |  ranges::views::split(' ')
        |  ranges::to<std::vector>;

    auto a_sentence = a_words | ranges::views::join(' ');

    auto b_words = b
        |  ranges::views::split(' ')
        |  ranges::to<std::vector>;

   // missing sortings and removing duplicates in between

    auto b_sentence = b_words | ranges::views::join(' ');

    auto a_iter = a_sentence.begin();
    auto b_iter = b_sentence.begin();
    size_t prefix_len = 0;
    while (*a_iter == *b_iter) {
        ranges::advance(a_iter, 1);
        ranges::advance(b_iter, 1);
        ++prefix_len;
    }

    size_t suffix_len = 0;
    // not quite sure how to iterate backwards to get the suffix length

}

Для суффикса я думал изменить диапазон, используя ranges::views::reverse. Однако это кажется невозможным.

Поэтому мой вопрос заключается в том, как найти суффикс при соединении с вектором, как я делал в примере.

...