Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81

Удаление строк

29.10.2017, 02:40. Показов 2255. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Я сам не программист, но вышло так, что нужно написать небольшую программулину для работы. Вроде все хорошо и прога работает, но нужно реализовать одну функцию, а понять как это сделать не могу, может кто подскажет. Короче, суть функции:

нужно сделать функцию, которая будет делать так:
есть Memo1 в нем строки вида:

копать глубокую яму
яму глубокую копать
яму глубокую выкопать яша
катя яму глубокую выкопать

на выходе должно получаться так:
яму глубокую выкопать яша
катя яму глубокую выкопать

то есть, если допустим все слова из строки один, есть в строке два, то строку один - удалять

Спасибо программисты на перед)

Добавлено через 2 часа 3 минуты
по сути нужно сравнить строчки, к примеру, расскажу на примере двух строк:
в Мемо есть строки:

миша бежит по полю
миша бежит по полю летом

нужно удалить строку если в другой строке есть все слова из нее, в результате должно получится:

миша бежит по полю летом

Была написана такая функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
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
но она работает в случае если порядок слов в строках одинаковый(((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2017, 02:40
Ответы с готовыми решениями:

Удаление похожих строк
Доброго дня.Появилось проблема, но тем похожих много на форуме. Может кто подскажет конкретно в моем случаи Имеется много файлов , мне...

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

Удаление строк из ListBox
подскажи те плиз как удалить все строки из ListBox1 void __fastcall TForm1::remaccClick(TObject *Sender) { TStringList *s =...

39
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
29.10.2017, 21:48  [ТС]
Студворк — интернет-сервис помощи студентам
Строки:
копать глубокую яму
яму глубокую копать
есть в
яму глубокую копать яша
катя яму глубокую копать

сделал опечатку в слове "копать" , хотель написать "выкопать" и тормознул...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33455 / 21555 / 8248
Регистрация: 22.10.2011
Сообщений: 37,008
Записей в блоге: 12
29.10.2017, 21:51
Ничего не понял. Давай несколько примеров: что есть и что должно остаться после работы алгоритма. Только без ошибок. Проверяй, что пишешь. Тут не чат Формулы 1...
1
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
29.10.2017, 21:56  [ТС]
Понял, админ, извини за мою тупость, сейчас покажу что на входе и что должно быть на выходе:

Входные данные:
гранитный памятник
гранитный памятник харьков
гранитный памятник цена
купить гранитный памятник
гранитный памятник харьков цена
гранитный памятник фото
гранитный памятник новый
купить гранитный памятник цена
элитный гранитный памятник
гранитный памятник фото и цена
гранитный памятник на могила
гранитный памятник каталог
гранитный памятник фирма
изготовление гранитный памятник
памятник из гранитный крошка цена
памятник из гранитный крошка
памятник из гранитный крошка фото цена


На выходе должно быть:
гранитный памятник харьков цена
гранитный памятник новый
купить гранитный памятник цена
элитный гранитный памятник
гранитный памятник фото и цена
гранитный памятник на могила
гранитный памятник каталог
гранитный памятник фирма
изготовление гранитный памятник
памятник из гранитный крошка фото цена
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.10.2017, 22:40
ну а если есть такие строки.
гранитный памятник
гранитный памятник памятник
что с ними? удалить? кого из двух?
0
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
29.10.2017, 22:41  [ТС]
удалить вот эту "гранитный памятник"

Добавлено через 23 секунды
я тут наверное всех уже достал
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.10.2017, 22:57
Лучший ответ Сообщение было отмечено дно21 как решение

Решение

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    TStringList * sh = new TStringList();
 
    for (int i = 0; i<Memo1->Lines->Count; i++)
    {
sh->Clear();
sh->Text = Memo1->Lines->Strings[i].LowerCase(); //
sh->Text = StringReplace(sh->Text, " ", "\n", TReplaceFlags() << rfReplaceAll);
 for (int ii=0; ii<Memo1->Lines->Count; ii++)
 {
 int mach = 0;
 if( ii!=i  )
             {
      for(int cq = 0; cq<sh->Count; cq++)
   {
  if (
  Memo1->Lines->Strings[ii].LowerCase().Pos(sh->Strings[cq]) !=0
     ) mach++;
   }
   if(mach==sh->Count)// если найденные все слова в поиске
   {
 Memo1->Lines->Strings[i]="*";// Memo1->Lines->Delete(i);
   }
             }
 }
 
    }
 
  sh=NULL;
  delete sh;

Входные данные:
гранитный памятник
гранитный памятник харьков
гранитный памятник цена
купить гранитный памятник
гранитный памятник харьков цена
гранитный памятник фото
гранитный памятник новый
купить гранитный памятник цена
элитный гранитный памятник
гранитный памятник фото и цена
гранитный памятник на могила
гранитный памятник каталог
гранитный памятник фирма
изготовление гранитный памятник
памятник из гранитный крошка цена
памятник из гранитный крошка
памятник из гранитный крошка фото цена

На выходе
*
*
*
*
гранитный памятник харьков цена
*
гранитный памятник новый
купить гранитный памятник цена
элитный гранитный памятник
*
гранитный памятник на могила
гранитный памятник каталог
гранитный памятник фирма
изготовление гранитный памятник
*
*
памятник из гранитный крошка фото цена
так пойдет?

Добавлено через 3 минуты
здесь удалилось
гранитный памятник фото и цена
1
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
29.10.2017, 23:01  [ТС]
Этот работает лучше))
понял почему удалилось:
гранитный памятник фото и цена
все слова из данной строки есть в:
памятник из гранитный крошка фото цена
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.10.2017, 23:07
все правильно! в строке гранитный памятник фото и цена есть буква и а в
строке памятник из гранитный крошка фото цена есть из
. вот и удаление совпадения.
можно еще и проверять длину слова, тогда будет по более точному совпадению удаление.
0
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
29.10.2017, 23:09  [ТС]
от сего момента lifeforce для меня настоящий ЭНЩЕЙН
бро, у тебя получилось то, что я не мог сделать пару недель!
я в восторге
0
29.10.2017, 23:12

Не по теме:

Цитата Сообщение от lifeforce Посмотреть сообщение
C++
1
2
sh=NULL; 
delete sh;
Действительно дважды гениально :sarcasm:

0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.10.2017, 23:13
можно добавить условие
C++
1
2
3
4
  if (
  Memo1->Lines->Strings[ii].LowerCase().Pos(sh->Strings[cq]) !=0
  && sh->Strings[cq].Length()>1// если больше одного символа
     ) mach++;
проверь все работает
0
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
29.10.2017, 23:15  [ТС]
Можешь написать как уже будет выглядеть готовый код?)
а то я еще вставлю еще условие куда-то никуда))))
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.10.2017, 23:18
Лучший ответ Сообщение было отмечено дно21 как решение

Решение

Не по теме:

Avazart, не придирайся к копипасту .



Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void __fastcall TForm2::Button1Click(TObject *Sender)
{
    TStringList * sh = new TStringList();
 
    for (int i = 0; i<Memo1->Lines->Count; i++)
    {
sh->Clear();
sh->Text = Memo1->Lines->Strings[i].LowerCase(); //
sh->Text = StringReplace(sh->Text, " ", "\n", TReplaceFlags() << rfReplaceAll);
 for (int ii=0; ii<Memo1->Lines->Count; ii++)
 {
 int mach = 0;
 if( ii!=i  )
             {
      for(int cq = 0; cq<sh->Count; cq++)
   {
  if (
  Memo1->Lines->Strings[ii].LowerCase().Pos(sh->Strings[cq]) !=0
  && sh->Strings[cq].Length()>1
     ) mach++;
   }
   if(mach==sh->Count)// если найденные все слова в поиске
   {
 Memo1->Lines->Strings[i]="*";// Memo1->Lines->Delete(i);
   }
             }
 }
 
    }
 
 
  delete sh;
}
1
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
29.10.2017, 23:28  [ТС]
В честь человека избавившего меня от мучений, назвал элемент обработки
Спасибо бро что ты есть и за то не прошел мимо и действительно помог мне!
наверное первый человек на форумах, который не шутил, не дерзил, не издевался и не кидался сарказмами, а действительно помог!
Миниатюры
Удаление строк  
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.10.2017, 23:31
можно еще и удалить все строки с символом *
0
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
29.10.2017, 23:36  [ТС]
????????????

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

повесил на форму кнопку для удаления "*"
Code
1
2
3
4
5
6
for ( int i = Memo1->Lines->Count - 1; i >= 0; i-- ) {
 //CGauge1->Progress = i;
 if ( Memo1->Lines->Strings[i] == "*") {
            Memo1->Lines->Delete( i );
        }
         }
после работы функции и ручного осмотра строк, буду ее жмякать
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.10.2017, 23:41
Рад что быстро схватываешь!
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.10.2017, 00:02
Цитата Сообщение от lifeforce Посмотреть сообщение
Avazart, не придирайся к копипасту .
Да и игнорирование умных указателей.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33455 / 21555 / 8248
Регистрация: 22.10.2011
Сообщений: 37,008
Записей в блоге: 12
30.10.2017, 13:14
Вот то решение, которое предлагал я:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::auto_ptr<TStringList> what(new TStringList); // #include <memory>
    std::auto_ptr<TStringList> loop(new TStringList);
    TSysCharSet ch; TStrings *L = Memo1->Lines;
 
    for (int i = 0; i < L->Count; i++)
    {
        what->Clear(); // я почему-то всегда был уверен, что это должно делаться автоматически в ExtractStrings, ан нет...
        ExtractStrings(ch << ' ', ch, L->Strings[i].LowerCase().c_str(), what.get());
        for (int j = 0; j < Memo1->Lines->Count; j++)
        {
            if (i == j || L->Strings[j] == "*") continue;
            loop->Clear();
            ExtractStrings(ch << ' ', ch, L->Strings[j].LowerCase().c_str(), loop.get());
            if (loop->Count > what->Count)
            {
                bool contained = true;
                for (int k = 0; contained && k < what->Count; contained = (loop->IndexOf(what->Strings[k++]) != -1));
                if (contained)
                {
                    L->Strings[i] = "*"; break;
                }
            }
        }
    }
}
2
1 / 1 / 2
Регистрация: 15.08.2017
Сообщений: 81
30.10.2017, 13:33  [ТС]
Вариант функции от volvo работает, ее результат равен результату работы функции от lifeforce .
Тестил на 10 разных выборках, результаты одинаковые!! Ничья 1:1
Спасибо volvo за отличный вариант реализации обработчика
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.10.2017, 13:33

Удаление строк StringGrid
Задание: нужно вывести приборы с их параметрами(не суть, какие) и сравнить их с параметрами, вводимыми пользователем. Есть кнопка Найти...

Удаление одинаковых строк Листбокс
Делаю игру алхимия и там добавляются одинаковые строки в лисбокс, а как сделать чтоб они одинаковые недобавлялись? или если добавились то...

Удаление пустых строк в StringGrid
Подскажите пожалуйста каким образом удалить все пустые строки в StringGrid? Заранее благодарен.

Удаление одинаковых строк в StringGrid1
Как в StringGrid удалить абсолютно одинаковые строчки? Пробовал переделать найденный код для делфи на билдер, но не вышло..

Std + удаление пустых строк
Доброго вечера.Ребята подскажите как удалить пустые строки из std::string s; То как то не выходит


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru