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

Задача:

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

Для лучшего понимания кода рекомендую сначала отвлечься от конечной цели и просто вывести на экран слова из файла, причём собирать слова посимвольно. Поскольку есть две цпочки: символы, в группе дающие слово, и символы — цепь разделителей, — то я использовал в коде дополнительную переменную, которая означает слово сейчас собирается или же собранное слово сбрасывается (например, выводится на экран). После сброса собранного слова, для анализа я обнуляю позиции: делаю слово пустым и ставлю курсор в начало слова. Это один из ключей моего подхода к решению пословного чтения без потери несловесных символов.
Когда слова собираются как нужно, следует их искать в файле-словаре. Для поиска по словарю создана дополнительная функция. Именно результутат этой функции даёт нам понять, нужно ли подменять слово. Внутри функции главное правильно описать алгоритм поиска слова в словаре. Т. е. как только слово собрано, мы сбрасываем его в эту функцию, где слово проверяется по файлу-словарю. Нашли слово — сообщаем, что нашли, и наоборот. Когда понятно, нашли мы слово или нет, нам понятно, нужно делать подмену или нет. Вот и всё.
Файл с текстом содержит любой текст с любым количеством строчек.
Файл-словарь хранит слова построчно или через пробелы.

Если у вас получилось, что в начале непонятно что вместо первого слова из файла, то, значит, это невидимый символ. Вероятнее всего, текстовый документ был сохранён в кодировке 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

	

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

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

  1. Этрусск:

    Не знаю почему, но не производится замена. Текст выводится в консоль в исходном виде.

    Компилю под VS2005. В чем может быть причина?

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/aleksey-nikolaevich-vasilev/programmirovanie-na-c-v-primerah-i-zadachah-22054458/?lfrom=15589587
Яндекс.Метрика