C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Сравнение "содержимого" TStrings
Oper01
Отправлено: 15.08.2004, 01:03


Станционный диспетчер

Группа: Участник
Сообщений: 145



Как наиболее просто сравнить два TStrings ? Результатом должно быть "одинаковые" и "не одинаковые".
Георгий
Отправлено: 15.08.2004, 10:12


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



можно использовать метод Equals
CODE
void Fill1(TStrings *s)
       {
       s->Clear();
       for(int i=0;i<10;++i)s->Add(i);
       };

void Fill2(TStrings *s)
       {
       s->Clear();
       for(int i=10;i<20;++i)s->Add(i);
       };

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
TStrings * ptrStrings[2];
for(i=0;i<2;++i)ptrStrings[i]=new TStringList;
Fill1( ptrStrings[0] );
Fill2( ptrStrings[1] );
const bool notEqu = ptrStrings[0]->Equals( ptrStrings[1] );
Fill2( ptrStrings[0] );
const bool Equ = ptrStrings[0]->Equals( ptrStrings[1] );
const bool succesful = ((!notEqu) && Equ);
const AnsiString message = AnsiString("method ") + AnsiString(succesful?"ok":"fauled");
Application->MessageBox(message.c_str(), "test complete", MB_OK );
** Oper01
Отправлено: 16.08.2004, 10:00


Не зарегистрирован







Спасибо, всё работает как часы !
** Oper01
Отправлено: 16.08.2004, 10:00


Не зарегистрирован







Спасибо, всё работает как часы !
Guest
Отправлено: 16.08.2004, 10:17


Не зарегистрирован







А не проще ли вот так ?

CODE

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString s1 = ListBox1->Items->Text;
  AnsiString s2 = ListBox2->Items->Text;

  if(s1 == s2) ShowMessage("Ok"); else ShowMessage("No Ok");
}
//---------------------------------------------------------------------------
Георгий
Отправлено: 16.08.2004, 19:28


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



хм..
а по моему вот так ещё проще:
CODE
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if( ListBox1->Items->Equals(ListBox2->Items) ) ShowMessage("Ok"); else ShowMessage("No Ok");
}
а тот код, что я выше привёл был всего лишь простеньким тестом корректности работы метода Equals. даже не тестом, а демонстрацией его работоспособности..

Вернуться в Вопросы программирования в C++Builder