как удалить повторяющиеся слова (те же слова, но в другом регистре) в тексте - PullRequest
0 голосов
/ 23 июня 2010

У меня есть текстовый файл, который содержит длинный список слов. Некоторые из них перекрываются с помощью регистра, например:

  • Честность
  • честность

Я хочу снять верхний регистр и оставить нижний регистр, который считается одним словом. Как я могу это сделать?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 июня 2010
  1. Прочитайте слово
  2. Преобразуйте его в нижний регистр
  3. Проверьте наличие дубликатов с помощью некоторого набора / хэш-таблицы такого типа.

ДляНапример, в C ++ вы можете использовать что-то вроде этого:

#include <set>
#include <string>
#include <iostream>
#include <algorithm>
#include <ctype.h>

struct lowercase { 
    std::string operator()(std::string const &s) const { 
        std::string ret(s);
        std::transform(&s[0], &s[s.length()-1], &ret[0], tolower);
        return ret;
    }
};

int main() {
    std::set<std::string> items;

    std::transform(
        std::istream_iterator<std::string>(std::cin), 
        std::istream_iterator<std::string>(), 
        std::inserter(items, items.begin()),
        lowercase());

    std::copy(items.begin(), items.end(), 
        std::ostream_iterator<std::string>(std::cout, "\n"));
    return 0;
}
0 голосов
/ 23 июня 2010

Я пытался и получил это.

> cat test
Honesty
World
Hello
world
Hello
honesty

> sort -uf test
Hello
Honesty
World

> sort -uf test | tr A-Z a-z
 hello
 honesty
 world

Спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...