Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
1

Сравнение слов в одном файле со словами в другом файле

25.02.2015, 02:32. Показов 3572. Ответов 13
Метки нет (Все метки)

Здравствуйте!
Суть задачи такая:
1. Первый файл - запросы с городами, второй файл - база городов РФ. Оба txt
2. Найти в запросах все города и сделать в дальнейшем какую-либо операцию, например, удаление найденных городов, замену или сделать первую букву заглавной.

вопрос знающим. Заключается в следующем. Какими способами это более менее нормально реализовать, в какую сторону копать?

Добавлено через 1 час 23 минуты
Пока надумал так:
1. Загрузка базы городов в map<int, string>
2. Чтение из файла с запросами пословно в str
3. Цикл - сравнивание str.compare(map[i])
Далее можно считать , например, в массив, индекс вхождения первой буквы каждого совпадения ( длину города и тд).
Какие есть еще предложения?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2015, 02:32
Ответы с готовыми решениями:

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов...

Замена слов в одном текстовом файле словами, записанными в другом текстовом файле
Кто-нибудь пожалуйста приведете пример реализации следующей программы имеются два тектовых файла -...

Можно ли на javascript'e в одном js-файле использовать функции, описанные в другом js-файле?
Подскажите, плз, можно ли на javascript'e в одном js-файле использовать функции, описанные в другом...

Как передать значение переменной PHP в одном файле в переменную JS в другом файле?
Подскажите пожалуйста, как передать значение PHP из одного файла в JS в другом. Везде облазил....

13
3170 / 1929 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2015, 03:31 2
Лучший ответ Сообщение было отмечено Роман_1985 как решение

Решение

Цитата Сообщение от Роман_1985 Посмотреть сообщение
Найти в запросах все города и сделать в дальнейшем какую-либо операцию
  • База городов конвертируется в автомат Ахо-Корасик.
  • Автомату скармливается файл запросов
  • На каждый найденный город вызывается обработчик, решающий, что с ним делать
1. Загрузка базы городов в map<int, string>
2. Чтение из файла с запросами пословно в str
3. Цикл - сравнивание str.compare(map[i])
Брось этих глупостей, Беня (с) Исаак Бабель
2
2713 / 1880 / 556
Регистрация: 05.06.2014
Сообщений: 5,480
25.02.2015, 04:36 3
Лучший ответ Сообщение было отмечено Роман_1985 как решение

Решение

Цитата Сообщение от Роман_1985 Посмотреть сообщение
1. Загрузка базы городов в map<int, string>
map<string,int>/set<string>
Цитата Сообщение от Роман_1985 Посмотреть сообщение
3. Цикл - сравнивание str.compare(map[i])
map.find(str)/set.count(str)
1
3170 / 1929 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2015, 05:29 4
Цитата Сообщение от Renji Посмотреть сообщение
map
Не делайте так больше.

String searching algorithm
0
2713 / 1880 / 556
Регистрация: 05.06.2014
Сообщений: 5,480
25.02.2015, 15:59 5
Цитата Сообщение от gazlan Посмотреть сообщение
Не делайте так больше.
С чего бы? У меня - выделение слова из текста за линейное время и поиск в словаре за логарифм/константу (unordered_map). Ваш Ахо Корасик на каждый символ будет тратить тот же логарифм/константу, в зависимости от реализации перехода по ребрам. Те же яйца, профиль сбоку. Но мое решение целиком стандартное, а вам еще реализовать Ахо Корасика надо. А если сравнить сколько ваше и мое решение памяти жрет...
0
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
25.02.2015, 16:13  [ТС] 6
Ахо-Корасик пока слишком сложно для меня, но спасибо за совет, получил доп. знания.
В общем, пока делаю с map. Основную задачу выполнил:
1. Нашел в запросах города
2. Заменил первую букву этих городов на Заглавную

НО, столкнулся со следующим вопросом.
А как записать обратно этот город в файл на тоже место? Или какое возможно другое решение?
Цель - чтобы получился файл с теми же запросами, но с городами с Заглавной буквы
0
3170 / 1929 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2015, 16:23 7
Цитата Сообщение от Роман_1985 Посмотреть сообщение
файл с теми же запросами, но с городами с Заглавной буквы
Ну, так эту букву и меняйте. Ничего больше трогать не надо.
Memory-mapped file
Отображение файла в память
0
2713 / 1880 / 556
Регистрация: 05.06.2014
Сообщений: 5,480
25.02.2015, 16:34 8
Цитата Сообщение от Роман_1985 Посмотреть сообщение
А как записать обратно этот город в файл на тоже место? Или какое возможно другое решение?
Зависит от того, как вы этот файл читали.
Цитата Сообщение от gazlan Посмотреть сообщение
Memory-mapped file
И как это поможет если чтение слов велось из файлового потока? Поток то не говорит по какому смещению он слово прочитал (tellg не спасет, ибо не учтет лидирующие пробелы). А значит и неизвестно какое место отображенного в память файла менять.
0
3170 / 1929 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2015, 16:40 9
Цитата Сообщение от Renji Посмотреть сообщение
И как это поможет

Не по теме:

Пройдите хоть раз по ссылкам, которые даются - и проникнитесь.

0
2713 / 1880 / 556
Регистрация: 05.06.2014
Сообщений: 5,480
25.02.2015, 16:44 10
Цитата Сообщение от gazlan Посмотреть сообщение
Пройдите хоть раз по ссылкам, которые даются - и проникнитесь.
Спасибо, с отображением файла в память я и так знаком. Еще раз:
C++
1
2
ifstream stream("text.txt");
stream>>word;
Ну отобразили теперь text.txt в память, какое его место менять чтобы исправить первую букву word?
PS "А ты через mapped file читай, тогда проблем не будет" не предлагать. Неудобно.
0
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
25.02.2015, 16:44  [ТС] 11
Чтение у меня происходит из файлового потока...
Правильно ли я понял, что самое нормальное решение - отображение файла в память?
0
2713 / 1880 / 556
Регистрация: 05.06.2014
Сообщений: 5,480
25.02.2015, 16:58 12
Лучший ответ Сообщение было отмечено Роман_1985 как решение

Решение

Цитата Сообщение от Роман_1985 Посмотреть сообщение
Правильно ли я понял, что самое нормальное решение - отображение файла в память?
Самое геморройное, за отсутствием стандартных средств форматированного ввода. Да и стандартных средств отображения в память как такового (WinAPI не предлагать, ибо в стандарт не входит). Чуток подумав, вам нужно немного попрыгать с бубном вокруг tellg, setp и размера слова. Ну, как-то так:
C++
1
2
3
stream>>word;
stream.setp(stream.tellg()-word.size());
stream<<'A';
Добавлено через 6 минут
UPD Пардон, не setp, а seekp.
1
3170 / 1929 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2015, 17:18 13
Цитата Сообщение от Роман_1985 Посмотреть сообщение
Правильно ли я понял, что самое нормальное решение - отображение файла в память?
Если требуется только in place редактирование, как в вашем случае (замена нескольких символов), то да, это оптимальный вариант - в связке с AC.

Не по теме:

К слову, AC - это стандартная техника, примеры кода несложно найти в сети, используется почти в любом сигнатурном сканере/антивирусе - рекомендую освоить.

1
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
25.02.2015, 17:41  [ТС] 14
Renji, Отлично, предложенный Вами способ работает!
gazlan, Так же спасибо за хорошие советы!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2015, 17:41

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не...

Заменить ссылки в одном файле на ссылки, находящиеся в другом файле, если последние сегменты ссылок совпадают
Здравствуйте, подскажите, пожалуйста, как можно сделать замену ссылок в txt файле? Заменять нужно...

Удаление элементов списка, находящегося в одном файле, из списка, имеющегося в другом файле
По сути есть два списка, одни - файлы в папке, которые рекурсивно сканятся и в одну строчку...

Переменные, объявленные в одном файле проекта, не видны в другом
Здравствуйте. Рабтаю над проектом Windows приложения. Код из первого файла: namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.