Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Найти и удалить дубли строк

Ответить
Настройки темы
C/C++ - Найти и удалить дубли строк

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Добрый день!
Пишу небольшую программулину для работы, почти все функции реализовал, но осталась одна, которую не могу решить. Короче, выкладываю суть вопроса:
Есть поле Memo1 в нем строки вида:
смартфоны цены
смартфоны
недорогие смартфоны
лучшие смартфоны
купить хороший смартфон
купить смартфон цена
купить смартфон в спб
купить смартфон в магазине
купить смартфон в интернет магазине

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

Получили:
недорогие смартфоны
лучшие смартфоны
купить хороший смартфон
купить смартфон цена
купить смартфон в спб
купить смартфон в интернет магазине


Вот что я написал (точнее подсказал Alexander Gamza):
AnsiString SearchStr;

for(int i=0; i<Memo1->Lines->Count; i++){
SearchStr = Memo1->Lines->Strings[i];

for(int j=i+1; j<Memo1->Lines->Count; j++)
{
if(Memo1->Lines->Strings[j].Pos(SearchStr))
Memo1->Lines->Delete(i);

}//end for j
}//end for i
но функция работает не корректно((
помогите!

Отправлено: 20:13, 25-10-2017

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4461
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Из ответов для "разобраться". Возможно полезным будет посмотреть на исходные коды meldmerge и
winmerge

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 11:42, 27-10-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


спасибо конечно за ответ, но мне нужно одно решение)
Думаю много времени займет разбор документов)

Отправлено: 23:51, 27-10-2017 | #3


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


KonVi_SEO@twitter, у вас в коде "каша". Цикл по Lines, а обращаетесь к Strings.
удалять надо по индексу вложенного цикла (и переписать условие), либо выходить из него после удаления. Сейчас внутренний цикл продолжает сравнивать со строкой, которой уже нет в массиве.

Отправлено: 11:14, 28-10-2017 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


покажете как правильно?

Busla, Busla, покажете как правильно?)

Отправлено: 20:12, 28-10-2017 | #5


Аватара для lxa85

Необычный


Contributor


Сообщения: 4461
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


KonVi_SEO@twitter, спрошу иначе.
Вы хотите разбираться в том, как это работает?
Или вам нужно "коробочное решение" из разряда подал массив строк на вход, получил фильтрованный массив на выходе?
Сколько у вас есть времени разбираться с данной задачей?
Так ли необходимо использовать язык С++ или это может быть какой-либо иной?

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 18:54, 29-10-2017 | #6


Новый участник


Сообщения: 21
Благодарности: 1

Профиль | Цитировать


Неправильно формулируете задачу. Если её решать буквально, то получится чушь.

1. раз два
2. два три

Обе строи будут удалены, т.к. каждая удовлетворяет условию для удаления

Отправлено: 12:21, 05-12-2017 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Найти и удалить дубли строк

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Дубли в настройке уведомлений Gambetto Microsoft Windows 10 5 19-10-2016 09:15
CMD/BAT - [решено] Найти и удалить папку clayton Скриптовые языки администрирования Windows 11 22-01-2013 04:21
CMD/BAT - [решено] Удалить переносы строк Anonymоus Скриптовые языки администрирования Windows 2 22-06-2012 05:27
CMD/BAT - Удалить несколько строк из файла GhostKU Скриптовые языки администрирования Windows 1 01-09-2011 18:40
Найти и удалить pi-a-ner Общий по Linux 6 11-09-2005 11:33




 
Переход