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

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

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

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

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

Добавлено через 1 час 23 минуты
Пока надумал так:
1. Загрузка базы городов в map<int, string>
2. Чтение из файла с запросами пословно в str
3. Цикл - сравнивание str.compare(map[i])
Далее можно считать , например, в массив, индекс вхождения первой буквы каждого совпадения ( длину города и тд).
Какие есть еще предложения?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2015, 02:32
Ответы с готовыми решениями:

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

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

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

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

Решение

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

Решение

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

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

НО, столкнулся со следующим вопросом.
А как записать обратно этот город в файл на тоже место? Или какое возможно другое решение?
Цель - чтобы получился файл с теми же запросами, но с городами с Заглавной буквы
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2015, 16:23
Цитата Сообщение от Роман_1985 Посмотреть сообщение
файл с теми же запросами, но с городами с Заглавной буквы
Ну, так эту букву и меняйте. Ничего больше трогать не надо.
Memory-mapped file
Отображение файла в память
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
25.02.2015, 16:34
Цитата Сообщение от Роман_1985 Посмотреть сообщение
А как записать обратно этот город в файл на тоже место? Или какое возможно другое решение?
Зависит от того, как вы этот файл читали.
Цитата Сообщение от gazlan Посмотреть сообщение
Memory-mapped file
И как это поможет если чтение слов велось из файлового потока? Поток то не говорит по какому смещению он слово прочитал (tellg не спасет, ибо не учтет лидирующие пробелы). А значит и неизвестно какое место отображенного в память файла менять.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2015, 16:40
Цитата Сообщение от Renji Посмотреть сообщение
И как это поможет

Не по теме:

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

0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
25.02.2015, 16:44
Цитата Сообщение от 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  [ТС]
Чтение у меня происходит из файлового потока...
Правильно ли я понял, что самое нормальное решение - отображение файла в память?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
25.02.2015, 16:58
Лучший ответ Сообщение было отмечено Роман_1985 как решение

Решение

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

Не по теме:

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

1
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
25.02.2015, 17:41  [ТС]
Renji, Отлично, предложенный Вами способ работает!
gazlan, Так же спасибо за хорошие советы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2015, 17:41
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru