szawel Temat założony przez niniejszego użytkownika |
Anagram » 2015-12-22 15:08:04 Napisalem taki kod #include <stdio.h> #include <string.h> #include <cstdlib>
int swap( int x, int y ) { char pom; pom = x; x = y; y = pom; } int dlugosc( char * arg ) { return strlen( arg ); } int anagram( char str1[], char str2[] ) { int a = dlugosc( str1 ); int b = dlugosc( str2 ); if( a == b ) for( int i = 0; i < a - 1; i++ ) { for( int j = 0; j < b - 1; j++ ) { if( a[ j ] > a[ j + 1 ] ) swap( a[ j ], a[ j + 1 ] ); if( b[ j ] > b[ j + 1 ] ) swap( b[ j ], b[ j + 1 ] ); } } else printf( "to nie anagram\n" ); } int main() { printf( "Wprowadz pierwszy lancuch znakow\n" ); char str1[ 100 ]; scanf( "%s", str1,( unsigned ) sizeof str1 ); printf( "Wprowadz drugi lancuch znakow\n" ); char str2[ 100 ]; scanf( "%s", str1,( unsigned ) sizeof str1 ); int d = anagram( str1, str2 ); printf( "%u", d ); system( "pause" ); } W drugiej pętli przy if wywala błedy: invalid types 'int int ' for array subscript. Nie wiem co z tym zrobic i czy ide wogole w dobrym kierunku z tym programem. Bardzo prosze o pomoc. |
|
carlosmay |
» 2015-12-22 15:13:43 int a = dlugosc( str1 );
if( a[ j ] > a[ j + 1 ] )
'a' nie jest tablicą. |
|
ArgonZapan |
» 2015-12-22 15:13:47 int anagram( char str1[], char str2[] ) { int a = dlugosc( str1 ); int b = dlugosc( str2 ); if( a == b ) { for( int i = 0; i < a - 1; i++ ) { for( int j = 0; j < b - 1; j++ ) { if( a[ j ] > a[ j + 1 ] ) swap( a[ j ], a[ j + 1 ] ); if( b[ j ] > b[ j + 1 ] ) swap( b[ j ], b[ j + 1 ] ); } } } else { printf( "to nie anagram\n" ); } } zapomniałeś klamry po if a co do błędu, zmienna 'a' nie jest tablicą char, tylko zmienną typu int[/code] |
|
szawel Temat założony przez niniejszego użytkownika |
» 2015-12-22 15:36:33 Rzeczywiscie przy warunkach nie powinno byc a i b tylko str1 i str2. Dziekuje za pomoc. |
|
szawel Temat założony przez niniejszego użytkownika |
» 2015-12-22 16:37:32 Poprawiłem kod. Wygląda tak : #include <stdio.h> #include <string.h> #include <cstdlib> #define swap(type, i, j) {type t = i; i = j; j = t;}
int dlugosc( char * arg ) { return strlen( arg ); } int anagram( char str1[], char str2[] ) { int a = dlugosc( str1 ); int b = dlugosc( str2 ); for( int i = 0; i < a - 1; i++ ) { for( int j = 0; j < b - 1; j++ ) { if( str1[ j ] > str1[ j + 1 ] ) swap( char, str1[ j ], str1[ j + 1 ] ); if( str2[ j ] > str2[ j + 1 ] ) swap( char, str2[ j ], str2[ j + 1 ] ); } } if( str1 == str2 ) { printf( "to anagram\n" ); } else printf( "to nie anagram\n" ); } int main() { printf( "Wprowadz pierwszy lancuch znakow\n" ); char str1[ 100 ]; scanf( "%s", str1,( unsigned ) sizeof str1 ); printf( "Wprowadz drugi lancuch znakow\n" ); char str2[ 100 ]; scanf( "%s", str2,( unsigned ) sizeof str2 ); int d = anagram( str1, str2 ); system( "pause" ); } Kompiluje sie, ale nie działa. Ktoś wie, gdzie popełniłem błąd? |
|
ArgonZapan |
» 2015-12-22 19:47:59 if( str1 == str2 ) { printf( "to anagram\n" ); } else printf( "to nie anagram\n" ); tak nie porównuje się łańcuchów znakowych, musisz użyć strcmp() nie bardzo rozumiem, co chciałeś osiągnąć, w tych 2 pętlach for |
|
szawel Temat założony przez niniejszego użytkownika |
» 2015-12-22 20:00:59 Te pętle miały posortować te łańcuchy. |
|
ArgonZapan |
» 2015-12-22 20:52:07 anagramy nie muszą mieć tyle samo liter więc, porównanie po sortowaniu, nic nie da.
przykład: http://wordlist.eu/anagramy/fraza,cplusplus/grupuj,dlugosc |
|
« 1 » |