Найти и удалить дубли строк
Добрый день!
Пишу небольшую программулину для работы, почти все функции реализовал, но осталась одна, которую не могу решить. Короче, выкладываю суть вопроса: Есть поле 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 но функция работает не корректно(( помогите! |
|
спасибо конечно за ответ, но мне нужно одно решение)
Думаю много времени займет разбор документов) |
KonVi_SEO@twitter, у вас в коде "каша". Цикл по Lines, а обращаетесь к Strings.
удалять надо по индексу вложенного цикла (и переписать условие), либо выходить из него после удаления. Сейчас внутренний цикл продолжает сравнивать со строкой, которой уже нет в массиве. |
покажете как правильно?
Busla, Busla, покажете как правильно?) |
KonVi_SEO@twitter, спрошу иначе.
Вы хотите разбираться в том, как это работает? Или вам нужно "коробочное решение" из разряда подал массив строк на вход, получил фильтрованный массив на выходе? Сколько у вас есть времени разбираться с данной задачей? Так ли необходимо использовать язык С++ или это может быть какой-либо иной? |
Неправильно формулируете задачу. Если её решать буквально, то получится чушь.
1. раз два 2. два три Обе строи будут удалены, т.к. каждая удовлетворяет условию для удаления :) |
Время: 16:21. |
Время: 16:21.
© OSzone.net 2001-