Учитывая массив строк, как я могу удалить дубликаты?

Я хотел бы знать, как удалить повторяющиеся строки из контейнера, но игнорировать различия слов от конечной пунктуации.

Например, учитывая эти строки:

Почему мы здесь?

Я хотел бы получить этот вывод:

Почему мы здесь?

-3

Решение

Алгоритм:

  1. Пока чтение слова прошло успешно, выполните:
  2. Если Конец файла, выход.
  3. Если список слов пуст, верните слово назад.
  4. еще начать
    Поиск по списку слов по слову.
  5. если слово не существует, отодвиньте слово назад.
    конец еще (шаг 4)
  6. конец (при чтении слова)

использование std::string за ваше слово.
Это позволяет вам сделать следующее:

std::string word;
while (data_file >> word)
{
}

использование std::vector содержать ваши слова (хотя вы могли бы использовать std::list также). std::vector растет динамически, поэтому вам не нужно беспокоиться о перераспределении, если вы выбрали неправильный размер.
Добавить к std::vector, использовать push_back метод.

Сравнивать std::stringиспользовать operator==:

std::string new_word;
std::vector<std::string> word_list;
//...
if (word_list[index] == new_word)
{
continue;
}
0

Другие решения

Так Вы сказали Вы знаете, как маркировать строку. (Если вы не проводите здесь некоторое время: https://stackoverflow.com/a/38595708/2642059) Так что я собираюсь предположить, что нам дали vector<string> foo который содержит слова с возможной конечной пунктуацией.

for(auto it = cbegin(foo); it != cend(foo); ++it) {
if(none_of(next(it), cend(foo), [&](const auto& i) {
const auto finish = mismatch(cbegin(*it), cend(*it), cbegin(i), cend(i));
return (finish.first == cend(*it) || !isalnum(*finish.first)) && (finish.second == cend(i) || !isalnum(*finish.second));
})) {
cout << *it << ' ';
}
}

Живой пример

Здесь стоит отметить, что вы не дали нам правил о том, как обрабатывать такие слова, как: «вниз», «понижающий голос» и «понижающий голос». Этот алгоритм предполагает, что 1улица 2 равны. Вы также не дали нам правила поведения: «Почему мы здесь, здесь?» Этот алгоритм всегда возвращает окончательное повторение, поэтому вывод будет «Почему мы здесь?»

Если предположения, сделанные этим алгоритмом, не совсем вам нравятся, оставьте мне комментарий, и мы постараемся помочь вам освоить этот код, чтобы вы могли вносить необходимые изменения.

0

По вопросам рекламы [email protected]