Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie znaków

Ostatnio zmodyfikowano 2017-11-23 18:29
Autor Wiadomość
pekfos
» 2017-11-20 01:11:15
No to zrób to na bazie sortowania. Wystarczy z głową zrobić jedną pętlę, do tego nie potrzeba przygotowania teoretycznego.
P-166997
adrian.paz
Temat założony przez niniejszego użytkownika
» 2017-11-21 11:03:34
Ale chyba trzeba więcej zrozumienia bo nie mam pojęcia wgl co ta pętla ma robić. Posortuje dwa stringi i co dalej? Jak zrobić żeby robili mi kombinacje słów z liter?
P-167049
pekfos
» 2017-11-21 17:35:14
Żadnych kombinacji. Masz sprawdzić, czy w stringu A są wszystkie znaki, potrzebne do skonstruowania B. Gdy oba napisy są posortowane, możesz to określić jedną pętlą przechodzącą po obu napisach naraz, ale używasz osobnych zmiennych do indeksowania ich.
C/C++
for( int i = 0, j = 0; j < B.size(); )
{
    if( i >= A.size() ) // Potrzeba znaków w B, ale nie ma już nic w A
         return false;
   
    // pozostałe przypadki (A[i] >, =, < B[j])
}
P-167056
adrian.paz
Temat założony przez niniejszego użytkownika
» 2017-11-21 22:53:10
Dobrze zrozumiem że zwraca true wtedy kiedy A[ i ] < B[ j ]? Bo jeżeli jest równe to wiadomo że pasuje a jeżeli mniejsze tzn że litera w A wystąpiła więcej niż raz prawda? Chociaż jeżeli mniejsza to powinna sprawdzać dalej bo może się pojawić potem tak?
P-167072
pekfos
» 2017-11-21 23:08:13
Dobrze zrozumiem że zwraca true wtedy kiedy A[ i ] < B[ j ]?
Nie. Nic w tej pętli nie będzie zwracać true.
P-167073
adrian.paz
Temat założony przez niniejszego użytkownika
» 2017-11-21 23:19:49
Miałem na myśli A[ i ] == B[ j ]. Wytlumacz mi to jakos tak na chlopski rozum prosze bo ja juz całkiem nie rozumiem. Jak nic nie bedzie pasować? -.- Wpisałem powiedzmy z klawiatury litery {eptfao}. W którejś linijce w pliku będzie zapisane słowo "poeta". Po posortowaniu rozumiem, że bedzie aeopt & aefopt. Sprawdzam pierwsza literke i się zgadza. Potem kolejna i tez jest ok. Litera "f" jest mniejsza od litery o wiec sprawdza dalej bo moze jeszcze wystapic. No i reszta pasuje czyli sa wszystkie znaki do skonstruowania wyrazu "poeta". Dlaczego więc ta pętla nie zwraca true? Wyjaśnij mi to prosze szerzej słownie nie wiem krokowo jak to działa. Jaki jest mechanizm. Bo po tym ostatnim Twoim wpisie że nic nie zwraca true to widać że dalej nie rozumiem :( 
P-167074
pekfos
» 2017-11-22 00:24:16
Pętla przechodzi po wszystkich wymaganych znakach, więc nie możesz w niej zwracać true. W pętli możesz najwyżej wykryć przypadek, w którym dopasowania na pewno nie ma, a nie z góry zarządzić, że jest dopasowanie, bo dwie pierwsze litery są sobie równe.
P-167075
adrian.paz
Temat założony przez niniejszego użytkownika
» 2017-11-22 10:49:03
C/C++
for( int i = 0, int j = 0; j < plikowe.size(); ) //dopóki są jeszcze litery w wyrazie z pliku
{
    if( i >= wpisane.size() ) //Jeżeli ilość liter w pliku jest większa od ilości liter wpisanych
         return false;
   
    if( wpisane[ i ] > plikowe[ j ] )
         return false;
   
    if( wpisane[ i ] < plikowe[ j ] ) i++;
   
    if( wpisane[ i ] == plikowe[ j ] ) i++; j++;
}

kompilator nie chce przyjąć tej pętli. Chce średnik przed intem tam gdzie chyba jest przecinek.. Można robić takie pętle z dwoma zmiennymi?
P-167076
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona