CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Wyszukiwanie ciągu dowolnych znaków

Wyszukiwanie ciągu dowolnych znaków

dział ogólny

Re: Wyszukiwanie ciągu dowolnych znaków

Nowy postprzez Cyfrowy Baron » środa, 23 listopada 2011, 17:38

polymorphism napisał(a): Teraz wyszukuje poszczególne liczby z wektora, zamiast szukać sekwencji liczb, którą ów wektor zawiera.


Nie przeszukujemy wektora lecz listę zawierającą sekwencje liczb. Wektor tylko przechowuje liczny, które szukamy w wierszach listy. Nie chodzi jednak o wyszukiwanie całych sekwencji, lecz np. lista zawiera liczny:

KOD text:     UKRYJ  
12, 15, 20, 25, 30
15, 20, 30, 40, 50
16, 18, 25, 35, 40
34, 16, 89, 30, 90
21, 15, 31, 19, 60
12, 15, 20, 25, 30
15, 20, 30, 40, 50
10, 20, 15, 8, 17
16, 18, 25, 35, 40
12, 15, 20, 25, 30
15, 20, 30, 40, 50
16, 18, 25, 35, 40


a my szukamy np.: 15, 20, 30. Przy czym nie chodzi wo wyszukanie na liście wszystkich wierszy zawierających wszystkie te liczby, ale też o wyszukanie najbardziej dopasowanego wiersza, gdy np. szukamy ciągu: 15, 30, 90

Monika18 napisał(a):to nie to wyszukuje jakoś inaczej.


Jakoś inaczej to mało precyzyjny opis problemu... :twisted:

Czy tobie może chodzi o to, żeby wyszukał np. 2 najbardziej pasujące liczby, czyli np. poszukiwany ciąg znaków: 15, 30, 90 znaczące liczby 2, pasujące wyniki: 15, 30; 15, 90; 30, 90?!?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wyszukiwanie ciągu dowolnych znaków

Nowy postprzez polymorphism » środa, 23 listopada 2011, 19:02

Nie przeszukujemy wektora lecz listę zawierającą sekwencje liczb.

Być może źle sformułowałem zdanie, nie chodziło mi oczywiście o przeszukiwanie wektora, tylko szukanie liczb zawartych w wektorze. Co do samego sposobu wyszukiwania, odniosłem wrażenie, że Monika18 zależało na uwzględnianiu kolejności wystąpień szukanych liczb.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wyszukiwanie ciągu dowolnych znaków

Nowy postprzez Cyfrowy Baron » środa, 23 listopada 2011, 19:37

polymorphism napisał(a): tylko szukanie liczb zawartych w wektorze.


Wciąż się chyba nie rozumiemy. Przeszukujemy listę szukając w niej liczb zadanych w polu Edit. Wektor tylko przechowuje pojedyncze liczby z tego pola. W wektorze niczego nie szukamy.

polymorphism napisał(a):że Monika18 zależało na uwzględnianiu kolejności wystąpień szukanych liczb.


Ja odniosłem zupełnie inne wrażenie:

Cyfrowy Baron napisał(a):Czy tobie może chodzi o to, żeby wyszukał np. 2 najbardziej pasujące liczby, czyli np. poszukiwany ciąg znaków: 15, 30, 90 znaczące liczby 2, pasujące wyniki: 15, 30; 15, 90; 30, 90?!?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wyszukiwanie ciągu dowolnych znaków

Nowy postprzez polymorphism » środa, 23 listopada 2011, 19:54

Wciąż się chyba nie rozumiemy. Przeszukujemy listę szukając w niej liczb zadanych w polu Edit. Wektor tylko przechowuje pojedyncze liczby z tego pola. W wektorze niczego nie szukamy.

No przecież o tym piszę! :D "szukanie liczb zawartych w wektorze" oznacza tyle, że wektor zawiera zbiór liczb, których będziemy szukać w jakimś innym zbiorze, w tym przypadku poszczególnych wierszach rich edita.

Mam nadzieję, że się już zrozumieliśmy ;)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wyszukiwanie ciągu dowolnych znaków

Nowy postprzez Monika18 » czwartek, 24 listopada 2011, 22:01

Cyfrowy baronie chodzi mi o to że na przykład w polu RhciEdit wpisuję:
wiersz 1) 12, 15, 20, 25, 30
wiersz 2) 15, 20, 30, 40, 50
wiersz 3) 16, 18, 25, 35, 40
wiersz 4) 34, 16, 89, 30, 90
wiersz 5) 21, 15, 31, 19, 60
wiersz 6) 12, 15, 20, 25, 30
wiersz 7) 15, 20, 30, 40, 50
wiersz 8) 10, 20, 15, 8, 17
wiersz 9) 16, 18, 30, 37, 40
wiersz 10) 12, 15, 20, 25, 30
wiersz 11) 15, 20, 30, 40, 50
wiersz 12) 16, 18, 25, 35, 40
i w polu TEdit podaję:
16, 18, 30, 37, 51
i teraz w kodzie mogę se ustalić że na przykład wyszukiwanie ma się rozpocząć od dwóch znaków i wtedy program znajdzie mi już wiersz 12 a nie wiersz 9 w którym jest najwięcej znaków.
Avatar użytkownika
Monika18
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): niedziela, 13 listopada 2011, 17:53
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: windows xp
Kompilator: c++ builder
Gadu Gadu: 0
    Windows XPFirefox

Re: Wyszukiwanie ciągu dowolnych znaków

Nowy postprzez Cyfrowy Baron » czwartek, 24 listopada 2011, 22:47

Więc kod, który otrzymałaś właśnie tak działa.

KOD cpp:     UKRYJ  
int lCount = 0;

int SearchNumbers(TStrings *List, String Text, int ile)
{
  Text += ",";

  vector<String> Numbers;

  int p = -1;
  do
  {
   p = Text.Pos(",");
   if(p == 0) break;

   String sSeg = Text.SubString(1, p - 1).Trim();
   if(!sSeg.IsEmpty()) Numbers.push_back(sSeg);

   Text = Text.Delete(1, p + 1);

  }while(p > 0);

  int nCount = 0;
  if( ile <= Numbers.size() ) nCount = ile;
  else
  {
   ShowMessage("Niepoprawna wartość 'ile'");
   return -1;
  }


  int l = lCount - 1;
  int iYes = -1;
  int t = 0;

  do
  {

   String sLine = List->Strings[l];
   int n = 0;

   for( int i = 0; i < nCount; i++ )
   {
                int p = sLine.Pos( Numbers[i] );

                if(p > 0)
                {
         n++;
                }

                if( t < n )
        {
          t = n;
                  iYes = l;

        }
   }

   l--;
  }while( l > 0);

 return iYes;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if( lCount <= 0 ) lCount = RichEdit1->Lines->Count;

 int index = SearchNumbers(RichEdit1->Lines, Edit1->Text, 2);

 lCount = index;

 if(index < 0) ShowMessage("Niczego nie znaleziono");
 else
 {
  RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, index, 0);
  RichEdit1->SelLength = RichEdit1->Lines->Strings[index].Length();
  RichEdit1->Perform(EM_SCROLLCARET, 0, 0);
  RichEdit1->SetFocus();
 }
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 5 gości