Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1

Сравнить 2 списка

02.07.2012, 15:49. Показов 3342. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, не подскажите как сравнить 2 списка.
при повторении строк, создать 3 список, и добавить в 3 список все строки которая повтряется
К примеру
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
1 список
 Кофе
 Мороженое
 Девушка
 Постель
 Танец
2 список
 Кофе
 Мороженое
 Друг
 Наташа
3 список должно занаситься
 Кофе
 Мороженое
Вот код сравнивает 2 списка
C++
1
2
3
4
5
6
7
for(int i=0;i<list1->Count;i++)
        {
                for(int j=0;j<list2->Count;j++)
                {
                        AnsiString find = list2->Strings[j].UpperCase();
                        if(list1->Strings[i].SetLength(list1->Strings[i].Length()-4).UpperCase()==find)
                        {
Но надо результат в 3 список..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2012, 15:49
Ответы с готовыми решениями:

Сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2
Как сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2

Сравнить два списка
Помогите пожалуйста с заданием: Определить функцию-предикат LONGER-THAN, аргументами которой являются два списка. Функция выдает...

Сравнить два списка
Есть два списка(две матрицы 5х4) L1 и L2, которые сгенерированы рандомно Нужно сравнить два этих списка и выяснить, есть ли у них...

31
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
02.07.2012, 16:29
Вот так попробуй. У меня работает.
C++
1
2
3
4
5
6
7
8
9
10
11
    int k = 0;
    for (int i = 0; i < ListBox1->Count; i++) {
        for (int j = 0; j < ListBox2->Count; j++) {
            AnsiString a = ListBox2->Items->Strings[j];
            if (ListBox1->Items->Strings[i] == a) {
                ListBox3->Items->Strings[k] = a;
                k++;
            }
        }
 
    }
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
02.07.2012, 17:11  [ТС]
OmutMoren, за идею спасибо но не получается..
C++
1
2
3
4
5
6
7
8
       int k = 0;
    for (int i = 0; i < exep->Count; i++) {
        for (int j = 0; j < papka->Count; j++) {
            AnsiString a = papka->Strings[j];
            if (exep->Strings[i] == a) {
                vir->Strings[i] = a;
                Log->Lines->AddStrings(vir);
                k++;
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
02.07.2012, 17:19
А по точнее опиши свою проблему. Ты хочешь работать с, так сказать, виртуальной памятью или с ЛистБоксами на форме? Можно же просто юзать Memo или тот же ListBox, и проблем не будет.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
02.07.2012, 17:22  [ТС]
OmutMoren, с TStringList ми работаю
C++
1
2
3
 exep = new TStringList;   // Ñîçäàíèå ýêçåìïëÿðà êëàññà TStringList
 papka = new TStringList;   // Ñîçäàíèå ýêçåìïëÿðà êëàññà TStringList
 vir = new TStringList;   // Ñîçäàíèå ýêçåìïëÿðà êëàññà TStringList
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2012, 17:31
Вот когда-то делал, нужное сдерёте
Вложения
Тип файла: rar Сравниватель строк файлов.rar (389.7 Кб, 30 просмотров)
1
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
02.07.2012, 17:31
Создавайте на форме один Memo и одну кнопку Button. Далее пишите:

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
34
35
TStringList * list1 = new TStringList;
TStringList * list2 = new TStringList;
TStringList * list3 = new TStringList;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    for (int i = 0; i < 10; i++) {
        list1->Add(i);
    }
    for (int i = 0; i < 10; i++) {
        list2->Add(i+6);
    }
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Memo1->Clear();
    int k = 0;
    for (int i = 0; i < list1->Count; i++) {
        for (int j = 0; j < list2->Count; j++) {
            AnsiString a = list2->Strings[j];
            if (list1->Strings[i] == a) {
                list3->Add(a);
                k++;
                Memo1->Lines->Add(a);
            }
        }
    }
}
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2012, 17:47
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
#include <algorithm>
#include <iterator>
//---------------------------------------------------------------------------
std::vector<String> v1,v2,v3;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i=0;i<Memo1->Lines->Count;i++) v1.push_back(Memo1->Lines->Strings[i]);
for(int i=0;i<Memo2->Lines->Count;i++) v2.push_back(Memo2->Lines->Strings[i]);
 
std::sort(v1.begin(),v1.end());
std::sort(v2.begin(),v2.end());
std::set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v3));
 
for(unsigned i=0;i<v3.size();i++) Memo3->Lines->Add(v3[i]);
}
//---------------------------------------------------------------------------
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
02.07.2012, 17:59  [ТС]
Цитата Сообщение от OmutMoren Посмотреть сообщение
for (int i = 0; i < 10; i++) {
list1->Add(i);
}
for (int i = 0; i < 10; i++) {
list2->Add(i+6);
}
Не понимаю зачем это

C++
1
2
3
4
5
6
7
8
for(int i=0;i<Memo1->Lines->Count;i++) v1.push_back(Memo1->Lines->Strings[i]);
for(int i=0;i<Memo2->Lines->Count;i++) v2.push_back(Memo2->Lines->Strings[i]);
 
std::sort(v1.begin(),v1.end());
std::sort(v2.begin(),v2.end());
std::set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v3));
 
for(unsigned i=0;i<v3.size();i++) Memo3->Lines->Add(v3[i]);
А это не консоль?Просто сложновато это...А мне еще защищать всё...и каждой строчке коменарий давать...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2012, 18:03
А это не консоль?
Нет, вы ж видете там Memo...
А мне еще защищать всё
Тогда не подходит, хотя я бы посмотрел на рожу препода...
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
02.07.2012, 18:23  [ТС]
Avazart, ГЫ))Я тоже посмотрел бы)Но лучше не буду эксперементировать)
Да, что то у меня голова не сработала.
просто библитоеки каки та там не стандартные...
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
02.07.2012, 18:29
Ddv122, Это я просто при создании формы заполнил list'ы числами.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2012, 19:11
просто библитоеки каки та там не стандартные...
Как раз стандартные ... http://ru.wikipedia.org/wiki/С... а_шаблонов
Просто это по сути использование готовой реализации...

А вообще приблизительно так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo3->Clear();     // Очистка результирующий список
int size1= Memo1->Lines->Count;  // размер первого списка
int size2= Memo2->Lines->Count;  // размер второго списка
 
for(int i=0; i<size1; i++)  // Цикл по первому списку
 for(int j=0; j<size2; j++) // Цикл по втрому списку
  {
    if( Memo1->Lines->Strings[i] == Memo2->Lines->Strings[j] ) // Найдена общаяя строка
     {
        Memo3->Lines->Add( Memo1->Lines->Strings[i]);// добавить в результирующий список эту строку
        break;// закончить искать во втором списке и перейти к следующей строке первого списка
     }
  }
}
//---------------------------------------------------------------------------
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
02.07.2012, 19:47  [ТС]
Avazart,
Цитата Сообщение от Avazart Посмотреть сообщение
int size1= Memo1->Lines->Count; // размер первого списка
int size2= Memo2->Lines->Count; // размер второго списка
А зачем размеры?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2012, 19:50
Для сокращенной записи, можно сразу подставлять Memo...->Lines->Count; в цикл, но выглядеть это будет не очень, и по эффективности проигрыш.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
02.07.2012, 20:50  [ТС]
Avazart, спасибо вот так всё работает, нашел ошибку
C++
1
2
3
4
5
6
7
8
9
int k = 0;
    for (int i = 0; i < exep->Count; i++) {
        for (int j = 0; j < papka->Count; j++) {
          {
    if( exep->Strings[i] == papka->Strings[j] ) // Íàéäåíà îáùàÿÿ ñòðîêà
     {
        vir->Add( exep->Strings[i]);// äîáàâèòü â ðåçóëüòèðóþùèé ñïèñîê ýòó ñòðîêó
        Log->Lines->AddStrings(vir);
        break;// çàêîí÷èòü èñêàòü âî âòîðîì ñïèñêå è ïåðåéòè ê ñëåäóþùåé ñòðîêå ïåðâîãî ñïèñêà
Добавлено через 48 минут
Цитата Сообщение от Ddv122 Посмотреть сообщение
break;// закончить искать во втором списке и перейти к следующей строке первого списка
не поспишил я с выводом
к примеру
список 1
1
2
5
список 2
1
3
7
список 3 получается при 2 нажати на кнопку
1
1
1
1
1
1
1
1
1
1
1
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2012, 21:21
Не вижу полного кода поэтому нечего сказать...
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
02.07.2012, 21:23  [ТС]
Avazart, ну примерно такой

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
TStringList  *exep, *papka, *vir;
//---------------------------------------------------------------------------
__fastcall TMain::TMain(TComponent* Owner)
    : TForm(Owner)
{
 
    exep = new TStringList;   // Ñîçäàíèå ýêçåìïëÿðà êëàññà TStringList
    papka = new TStringList;   // Ñîçäàíèå ýêçåìïëÿðà êëàññà TStringList
    vir = new TStringList;   // Ñîçäàíèå ýêçåìïëÿðà êëàññà TStringList
}
//---------------------------------------------------------------------------
__fastcall TMain::~TMain( ) {
    delete exep;  //îñâîáîæäàåì ïàìÿòü
    delete papka;  //îñâîáîæäàåì ïàìÿòü
    delete vir;  //îñâîáîæäàåì ïàìÿòü
}
//-------------------------------------------------------------------
TSearchRec sear;
 AnsiString FileNoExt;
 AnsiString Path=Edit1->Text;
 if(FindFirst(Path +"\\"+ "*.exe", faAnyFile, sear) == 0)
 {
 do
 {
 FileNoExt = ChangeFileExt( sear.Name,"" );
 exep->Add(FileNoExt);
 }
 while(FindNext(sear) == 0);
 }
 FindClose(sear);
 {
    AnsiString Dir = Edit1->Text+"\\*" ;
    TSearchRec sr;
    for (int r=FindFirst(Dir, faAnyFile, sr);!r;r=FindNext(sr))
      if ((sr.Attr&16)&&(sr.Attr&7))
        papka->Add(sr.Name);
    FindClose(sr);
    }
    {
 int k = 0;
    for (int i = 0; i < exep->Count; i++) {
        for (int j = 0; j < papka->Count; j++) {
          {
    if( exep->Strings[i] == papka->Strings[j] ) // Íàéäåíà îáùàÿÿ ñòðîêà
     {
        vir->Add( exep->Strings[i]);// äîáàâèòü â ðåçóëüòèðóþùèé ñïèñîê ýòó ñòðîêó
        Log->Lines->AddStrings(vir);
        break;// çàêîí÷èòü èñêàòü âî âòîðîì ñïèñêå è ïåðåéòè ê ñëåäóþùåé ñòðîêå ïåðâîãî ñïèñêà
 
} }}}
}
0
1 / 1 / 1
Регистрация: 07.04.2016
Сообщений: 243
20.09.2017, 05:51
Avazart, На чём писали, подскажете? Работа отличная!
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.09.2017, 10:52
Степан_888, Одно из двух или С++Builder2009 или С++BuilderXE3.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2017, 10:52
Помогаю со студенческими работами здесь

Сравнить два списка чисел
Подскажите как сравнить два списка чисел, надо выявить совподающие. например : 1. 1,8,7,11,15,25,36,48 первый список с бд ...

Сравнить элементы datagridview и списка
Здравствуйте, помогите разобраться, есть dataGridView1 в нем последовательности такого вида: 2 1 или 1 1 1 И список...

Сравнить два списка Datetime
Доброе время суток! Ошибка в цикле, совсем запутался) В итоговый список выводит слишком много значений, а должно выводиться всего одно.Как...

Сравнить и выбрать значение из списка
День добрый. Вопрос следующий: есть у меня список оборудования, например А, B, C, D и у каждого есть тех.характеристики double(x, y, z) ...

Обработать и сравнить два списка
Все привет, Решаю такую задачу : Файловый сервер, хотим видеть какие файлы были открыты. Пытаюсь сделать так, массив из $result_list ,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru