Я разбиваю две строки на 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
. Однако это кажется невозможным.
Поэтому мой вопрос заключается в том, как найти суффикс при соединении с вектором, как я делал в примере.