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

Porównanie dwóch wyrazów

Ostatnio zmodyfikowano 2021-01-25 18:42
Autor Wiadomość
Razrex
Temat założony przez niniejszego użytkownika
Porównanie dwóch wyrazów
» 2021-01-25 14:01:57
Mam za zadanie porównać ze sobą 2 wyrazy i sprawdzić czy składają się z takich samych liter np abbb i aabbb odda 1 bo są te same litery a aabbbc i abb odda 0.
Nie za bardzo znam się na c++ i poszukuję pomocy.
Mam kod na anagramy i miałem się wzorować na nim.

C/C++
int anagram( string slowo1, string slowo2 ) {
   
   
int l1[ 256 ];
   
int l2[ 256 ];
   
int i, t, d1, d2;
   
   
for( i = 0; i < 256; i++ ) l1[ i ] = 0;
   
   
d1 = slowo1.length();
   
for( i = 0; i < d1; i++ ) l1[ slowo1[ i ] ] ++;
   
   
   
for( i = 0; i < 256; i++ ) l2[ i ] = 0;
   
   
d2 = slowo2.length();
   
for( i = 0; i < d2; i++ ) l2[ slowo2[ i ] ] ++;
   
   
t = 1;
   
for( i = 0; i < 256; i++ ) if( l1[ i ] != l2[ i ] ) t = 0;
   
   
return t;
   
   
}

int main( int argc, char * * argv ) {
   
   
cout << anagram( "tata", "mama" ) << endl;
   
cout << anagram( "tata", "ttaaa" ) << endl;
   
return 0;
}
P-178009
nanoant20
» 2021-01-25 15:42:25
można skorzystać z compare lub
najpierw sprawdź czy napisy są równej długości
jeżeli tak, to trzeba je posortować
następnie sprawdzasz czy posortowane napisy są sobie równe
jeżeli tak zwracasz true

//edit: zmylił mnie tytuł "Porównanie dwóch wyrazów"
i podałem pseudo kod na anagram

//edit: tutaj jest rozwiązania:
Check whether two strings contain same characters in same order

trzeba w main przed if skorzystać z biblioteki "algorithm" i dopisac sortowanie
C/C++
sort( s1.begin(), s1.end() );
sort( s2.begin(), s2.end() );
if( solve( s1, s2 ) )
{ ...
P-178010
Razrex
Temat założony przez niniejszego użytkownika
» 2021-01-25 16:06:57
A co jeśli nie są równej długości ?
Bo nie muszą być a wartość ostateczna i tak może być 1.

Wpadłem na pomysł żeby ze słów wybrać po jednej literze i wpisać je do tablicy a potem porównać np: z (aaabbccaaa) wpisać do tablicy (a,b,c) i z drugim tak samo.
Tylko tu jest problem nie wiem jak to zrobić żeby został wpisana tylko jedna litera i czy w ogóle da się porównać w ten sposób tablice.


//edit: Dzięki wielkie nanoant20. Zamykam temat.
P-178011
pekfos
» 2021-01-25 18:42:24
Najprościej policzyć histogram z obu wyrazów i sprawdzić czy oba histogramy mają niezerowe wartości na tych samych pozycjach. Twój kod prawie to robi, tylko sprawdza czy histogramy są sobie równe:
C/C++
for( i = 0; i < 256; i++ ) if( l1[ i ] != l2[ i ] ) t = 0;
Wystarczy zaostrzyć ten warunek w ifie.
P-178014
« 1 »
  Strona 1 z 1