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

Сравнение списков

17.02.2013, 01:35. Показов 4572. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 списка (стринг листа)
1 список

Code
1
2
3
4
5
6
1
2
3
1
1
2
и
2 список
Code
1
2
3
4
5
1
2
1
1
1
и в результате после сравнения в 3 списке должно выйти
Code
1
3
т.е не повторяющиеся строка, и без дубликата...
Может есть у кого какие либо идеи?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2013, 01:35
Ответы с готовыми решениями:

Сравнение списков
Попросили на писать программу для сравнения списоков. Написал: TStringList *list1 = new TStringList; list1->Sorted =...

Сравнение списков
Добрый день. Есть два списка, которые надо добавить в третий. Например, Список один: attribute1, слово attribute2, слово2 ...

Сравнение списков
Доброго времени суток . Нужен небольшой совет по программе . Есть 2 списка (стандартный STL-кий класс list ) , нужно сравнить их на...

50
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 02:53
std::set и алгоритмы STL (не помню точно как их там)
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 15:50
Вот я когда-то ПисаКaл на Builder2009
Вложения
Тип файла: rar Сравниватель строк файлов.rar (390.2 Кб, 15 просмотров)
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
17.02.2013, 16:01  [ТС]
Avazart, я уже видел это)
C++
1
2
3
fr.clear();
std::set_difference(fa.begin(),fa.end(),fb.begin(),fb.end(),back_inserter(fr));
show(fr,3);
Вся проблема в том что я не понимаю этот код)
Сложно для меня..
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 16:06
Код в три строчки.. суть в одной...

Добавлено через 3 минуты
Алгоритм не сложен, в принципе можно реализовать и без STL (если подумать) :

1. Отсортировать списки.
2. Сделать уникальными элементы в них - удалить повторяющиеся - они будут находится рядом после сортировки.
3. Ну да далее находить саму "разницу" сравнивая элементы (тут и нужно подумать)
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
17.02.2013, 18:01  [ТС]
Avazart, вот рабочий вариант....
но он мне кажется не много большеват...
а и забыл прошлый раз указать дубликаты только в Memo1
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
  TStringList *list = new TStringList;
    list->Text = Memo1->Text;
    AnsiString del;
    for(int i = 0; i < list->Count; i++)
    {
        del = list->Strings[i];
        for(int y = 0; y < list->Count; y++)
        {
 
            if(list->Strings[y] == del)
            {
                list->Delete(y--);
            }
        }
        list->Add(del);
    }
    Memo1->Clear();
    Memo1->Text = list->Text;
 
     for ( size_t i = 0, m1_count = Memo1->Lines->Count; i < m1_count; ++i )
    {
        if ( ! Memo2->Text.Pos( Memo1->Lines->Strings[i] ) ) {
            Memo3->Lines->Add( Memo1->Lines->Strings[i] );
        }
    }
 
    delete list;
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 18:04
Цитата Сообщение от Ddv122 Посмотреть сообщение
C++
1
if ( ! Memo2->Text.Pos( Memo1->Lines->Strings[i] ) ) {
Ну тут сравнение по частям текста а не строго по строкам.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
17.02.2013, 18:11  [ТС]
Avazart, мне нужно что то вроде такого
Миниатюры
Сравнение списков  
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 18:12
А что это ?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
17.02.2013, 18:20  [ТС]
Avazart, мне нужно найти какая флэшка была отключена от ПК
у меня есть 2 списка
1 - все флэшки во время запуска программы
2 - обновленный список после отключении флэшек

к примеру

в 1
Code
1
2
3
С:
В:
F:
во 2
Code
1
2
С:
F:
В итоге флэшка B отключена
но бывают во 2 списке дубликаты...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 18:22
Ну так зачем два списка не легче контролировать все в одном ?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
17.02.2013, 18:24  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так зачем два списка не легче контролировать все в одном ?
Как в одном ?
Изначально было 4 флэшки мы отключили 1, букву её не знаем...нам нужно узнать букву...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 18:28
Цитата Сообщение от Ddv122 Посмотреть сообщение
Как в одном ?
Изначально было 4 флэшки мы отключили 1, букву её не знаем...нам нужно узнать букву...
Разве в сообщении об отключении нет информации об отключенной флешке ?
Если нет тогда чем поможет второй список ?
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
17.02.2013, 18:34  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Разве в сообщении об отключении нет информации об отключенной флешке ?
C++
1
2
3
    if( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8004 )  //ëîâèì îòêëþ÷åíèå
    {
        Log->Lines->Add( " USB-íàêîïèòåëü îòêëþ÷åí  ");  //â îò÷¸ò îòêëþ÷åíèå
т.е букву флэшки мы не знаем

Цитата Сообщение от Avazart Посмотреть сообщение
Если нет тогда чем поможет второй список ?
В первом списке все подключенные диски в данный момент
Во втором обновленный список после отключения .( т.е 1 список минус отключенная флэшка )но бывают дубликаты
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
17.02.2013, 18:35
m1, m2, m3 - Memo
C++
1
2
3
4
    m3->Clear();
    for (int i = 0; i < m1->Lines->Count; i++)
        if (m2->Lines->IndexOf(m1->Lines->Strings[i]) < 0)
            m3->Lines->Add(m1->Lines->Strings[i]);
если в первом списке есть повторы, то условие нужно записать так
C++
1
if (m2->Lines->IndexOf(m1->Lines->Strings[i]) < 0 && m3->Lines->IndexOf(m1->Lines->Strings[i]) < 0)
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 19:38
Честно говоря непонятные мне манипуляции если можно узнать букву флешки прямо из сообщения об отключении.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
17.02.2013, 19:46  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
узнать букву флешки прямо из сообщения об отключении.
Как ??
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 19:47
http://msdn.microsoft.com/en-u... 85%29.aspx
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
17.02.2013, 19:50  [ТС]
Avazart, я видел только на C# реализацию, у меня не вышло получить букву...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 20:34
Вот что Google выдал :
Delphi
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    label1: TLabel;
  private
    procedure WMDeviceChange(var Msg: TMessage); message WM_DeviceChange;
    { Private declarations }
  public
    { Public declarations }
  end;
 
const  
  DBT_DeviceArrival = $8000;
  DBT_DeviceRemoveComplete = $8004;
  DBTF_Media = $0001;
  DBT_DevTyp_Volume = $0002;
 
type
  PDevBroadcastHdr = ^TDevBroadcastHdr;
  TDevBroadcastHdr = packed record
    dbcd_size: DWORD;
    dbcd_devicetype: DWORD;
    dbcd_reserved: DWORD;
  end;
 
type
  PDevBroadcastVolume = ^TDevBroadcastVolume;
  TDevBroadcastVolume = packed record
    dbcv_size: DWORD;
    dbcv_devicetype: DWORD;
    dbcv_reserved: DWORD;
    dbcv_unitmask: DWORD;
    dbcv_flags: Word;
  end;
 
var
  Form1: TForm1;
 
 
implementation
 
{$R *.dfm}
 function GetRemovableDrives: string;
var
  d: dword;
  b: byte;
begin
  result := '';
  d := GetLogicalDrives;
  for b := 2 to 26 do
    if 1 shl b and d > 0 then
      if GetDriveType(PChar(chr(b+65)+':\')) = DRIVE_REMOVABLE then
        result := result + chr(b+65)+':\';
end;
 
 
 
function GetDrive(pDBVol: PDevBroadcastVolume): string;
var
  i: Byte;
  Maske: DWORD;
begin
 
    Maske := pDBVol^.dbcv_unitmask;
    for i := 0 to 25 do
    begin
      if (Maske and 1) = 1 then
        Result := Char(i + Ord('A')) + ':\';
      Maske := Maske shr 1;
    end;
 
end;
 
procedure TForm1.WMDeviceChange(var Msg: TMessage);
var
  Drive: string;
begin
  case Msg.wParam of
    DBT_DeviceArrival:
      if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = DBT_DevTyp_Volume then
      begin
        Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
        label1.Caption :=  Drive;
 
      end;
    DBT_DeviceRemoveComplete:
      if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = DBT_DevTyp_Volume then
      begin
        Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
        label1.Caption := ' removed from Drive ' + Drive;
      end;
  end;
end;
 
 
end.
Добавлено через 42 минуты

Переписав :

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
#include <Dbt.h>
//---------------------------------------------------------------------------
String __fastcall GetDriveName(DWORD Mask)
{
 for(int i=0; i< sizeof(Mask)*8; i++)
    if( Mask &(1<<i) )
        return String( (char)('A'+i))+":\\";
 
return 0;
}
//-----------------------------------------------------------------------------
void __fastcall TForm1::WMDeviceChange( TMessage &Message )
{
if(Message.Msg == WM_DEVICECHANGE)
    {
     switch(Message.WParam)
         {
             case DBT_DEVICEARRIVAL:
             case DBT_DEVICEREMOVECOMPLETE:
                 {
                        DWORD device_type=((PDEV_BROADCAST_VOLUME)Message.LParam)->dbcv_devicetype;
 
                        if(device_type == DBT_DEVTYP_VOLUME)
                            {
                                PDEV_BROADCAST_VOLUME P = (PDEV_BROADCAST_VOLUME)Message.LParam;
                                String Drive = GetDriveName( P->dbcv_unitmask );
 
                                if(Message.WParam == DBT_DEVICEARRIVAL)
                                         Memo1->Lines->Add("+ "+Drive);
                                if(Message.WParam == DBT_DEVICEREMOVECOMPLETE)
                                         Memo1->Lines->Add("- "+Drive);
                            }
                     break;
                 } // end  case
                default: break;
            }// end switch
     } // end if
}
//---------------------------------------------------------------------------
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2013, 20:34
Помогаю со студенческими работами здесь

Сравнение списков
Доброго времени суток! Подскажите, пожалуйста, как написать программу, которая сравнивает по количеству элементов два списка.

Сравнение Списков
Доброго времени суток! Прошу помочь в следующем: Есть переменные А и В в которых разные списки с данными. Необходимо сравнить...

Сравнение списков
Написать функцию, которая проверяет, состоят ли два заданных списка из одних и тех же элементов (независимо от порядка их расположения) ...

Сравнение списков
Добрый день! Помогите пожалуйста. У меня есть 2 разных списка public List&lt;postgreconnect.posgreconnect.Sinxron&gt; newbd = new...

Сравнение двух списков
имеется 2 списка примерно такого типа: 1;2;3;4;0 и 1;2;3;4;1 1;2;3;4;2 и 1;2;3;4;2 1;2;3;4;3 и 1;2;3;4;3 1;2;3;4;4 и ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru