Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[ поиск одинаковых строк ]

1.9K
03 июня 2004 года
xiOn
78 / / 16.03.2004
Есть два текстовых файла содержащих список слов.
Задача такова чтобы найти одинаковые строки в файловых листах и удолить их. Я сделал так чтобы с первого файла считывалась строка потом она начинала стравниватся со всеми строками воторого файла и при нахождении одинаковой прога должна выризать эту строку в обеих файлах(у меня и с этим вознклим проблемы). После вырезки строк происходило считывание следующий строки в первом листе и её стравнивание со всеми строками воторого листа. И так до конца первого.
Но это очень и очень медленно...
особенно если листы большие! причём пользыватель может подумать что прога просто напросто зависла, хотя это не так. Я хотел бы узнать как этот процесс можно организовать быстрее, есть ли какая нибуть функция поиска слов в файле, и как можно правильно вырезать строку чтобы на её месте стала последующая строка.
Пожалуйста подскажите...
7.4K
03 июня 2004 года
burashka
12 / / 02.06.2004
В голову ничё лучше не пришло кроме как:
1. Создаём массив интов размером с количество строк первого файла
2. шерстим первый файл и пишем в соотв. элемент массива контрольную сумму по текущей строке (контрольную сумму умеешь считать? :))
пункт один и два проделываем для второго файла
сравниваем два массива интов, када значения элементов совпадают - очень большая вероятность что и строки одинаковые :) получаем явно номера строк котрые надо вырезать - можно тоже записать куданить, либо сразу резать . всё.

P.S.
хм,а будет ли быстрее?
можно первый массив сделать них не массивом а мапом (map) вернее даже мультимапом,где ключ - контрольная сумма, а значение - номер строки и проходя по второму массиву вытаскивать из мапа по ключу номера строк...это будет заметно быстрее чем два вложенных цикла, если число элементов большое (>100000)
3
03 июня 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by burashka
В голову ничё лучше не пришло кроме как:
1. Создаём массив интов размером с количество строк первого файла
2. шерстим первый файл и пишем в соотв. элемент массива контрольную сумму по текущей строке (контрольную сумму умеешь считать? :))
пункт один и два проделываем для второго файла
сравниваем два массива интов, када значения элементов совпадают - очень большая вероятность что и строки одинаковые :) получаем явно номера строк котрые надо вырезать - можно тоже записать куданить, либо сразу резать . всё.

P.S.
хм,а будет ли быстрее?
можно первый массив сделать них не массивом а мапом (map) вернее даже мультимапом,где ключ - контрольная сумма, а значение - номер строки и проходя по второму массиву вытаскивать из мапа по ключу номера строк...это будет заметно быстрее чем два вложенных цикла, если число элементов большое (>100000)



А зачем так сложно?
Значительно проще использовать map<string, int>, где значение - номер строки, файловый указатель или т.п. (не обязательно int)

1.9K
03 июня 2004 года
xiOn
78 / / 16.03.2004
вы меня очень здорова прогрузили!
да и вообще чем сложнее делаш механизм тем больше вероятных ошибок..
пожалуйста покажите как то что вы выше предлогали будет выгледить на рабочим примере
1.9K
03 июня 2004 года
xiOn
78 / / 16.03.2004
если нет желания тогда скажите как можно вырезать целую строку на которой указатель в iostream ?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог