Porównanie dwóch wyrazów
Ostatnio zmodyfikowano 2021-01-25 18:42
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. 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; }
|
|
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 ordertrzeba w main przed if skorzystać z biblioteki "algorithm" i dopisac sortowanie sort( s1.begin(), s1.end() ); sort( s2.begin(), s2.end() ); if( solve( s1, s2 ) ) { ... |
|
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. |
|
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: for( i = 0; i < 256; i++ ) if( l1[ i ] != l2[ i ] ) t = 0;
Wystarczy zaostrzyć ten warunek w ifie. |
|
« 1 » |