C++ Работа с файлами. Заменить слова файла, найденные в словаре слов, звездочками

Привет, читатель. Сейчас я покажу что-то из разряда не очень понятных примеров для новичка. Но это может быть кому-то будет полезным.

    Задача:

  • Есть файл с текстом. Есть словарь слов. Все слова, которые есть в словаре слов, нужно найти в файле с текстом и все их заменить на звездочку.

Вот такая вот задача. Может она и покажется очень простой, но это не совсем так. Все зависит от того, как мы видим проблему и какое именно нам нужно решение. В большинстве случаев, люди с форумов или студенты, сдающие лабораторные выполнят решение, нарушив некоторое форматирование. Наиболее вероятно, что обрежут пробелы. Ну или что-то в этом роде. Меня такой расклад не очень устраивает, поэтому я выбрал вариант решения с сохранением всех символов. Далеко не идеально, но не так уж и плохо.

С++ Visual Studio 2010

Без дополнительной вставки переноса строки внутри моего кода перенос строки просто проигнорируется, поэтому пришлось вставить насильно
.
Функция, разбивающая строку на слова, используемая в этом примере не совсем привычная, но слово "слово" понятие относительное. Пусть словом будет нераздельное слово, состоящее только из не разделителей и в то же время пусть словом будет нераздельное слово, состоящее только из разделителей. Вот по такому принципу слова попадают в вектор, который в результате получается на выходе. Так как в файле может быть несколько строчек, то это значит, что может быть столько векторов, сколько строчек в файле. Двумерный вектор я делать умею, но это будет совсем сложно для новичков, поэтому простой одномерный вектор с последующей склейкой каждого нового результата.

Код проверен в VS2010/ В gcc можно немного короче, но так как Студия для многих удобнее, решил оставить код именно в этом виде.

Файл с текстом содержит любой текст с любым количеством строчек.
Файл слов содержит набор слов через пробелы или на каждой строчке по слову (как наиболее удобные варианты).

Если у Вас получилось, что вначале непонятно что, вместо первого слова из файла, то значит это невидимый символ. Вероятнее всего текстовый документ был сохранен в кодировке UTF-8 c каким-то там BOOM. Лучше вместо обычного блокнота использовать Notepad++
Можно просто пересоздать словарь. Создать новый документ, сохранить в кодировке ANSI и запихать в него словарь. Вообщем, как угодно убрать непечатаемый, скрытый с наших глаз символ.

Файлы, проверяемые во время создания:
input.txt

Test string file
Mama mila ramu
Polevoi lopata kupol epel
oskolki  okean povest
golova  serdce
angel   svoboda krila   nebesa
tesT test

dictionary.txt

test
Test
povest
swoboda

Надеюсь показал не зазря. В таком виде как есть, файлы должны находится в каталоге, где находится исполняемый файл. Проверку на успешное открытие имеет смысл добавить, я не добавил только чтобы не мешало смотреть на основную часть.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Отец перед сном рассказывает сыну сказку: - Жил на свете богатый человек. Купил он себе самый лучший компьютер и кучу лицензионных программ. - Пап, а как это - лицензионных? - Спи, сынок, я же сказал - это сказка! . .

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок