counting sort / problem ze wskaźnikami i tablicami
Ostatnio zmodyfikowano 2016-11-22 10:40
kkkkkkkkkkk Temat założony przez niniejszego użytkownika |
counting sort / problem ze wskaźnikami i tablicami » 2016-11-22 02:38:40 "Napisać program sortujący napisy (tzn. ciągi znaków) według pierwszej litery (nie rozróżniając dużych i małych liter), stosując sortowanie przez zliczanie." Przy kompilacji wyskakują błędy "error: array subscript is not an integer" w funkcji Zliczanie. Funkcja ta jest implementacją algorytmu http://lifehug.com/category/algorithms/ Niestety nie jestem jeszcze biegły we wskaźnikach i tablicach i nie do końca wiem jak to zmodyfikować. #include <stdio.h> #include <string.h> #include <stdlib.h>
#define MaxDlugoscNapisu 30 #define MaxIloscNapisow 5 #define IleJestLiter 26
char ** A; char ** B; char ** C;
void Zliczanie( char ** A, char ** B, int ilosc ) { int i, j; for( i = 1; i <= IleJestLiter; i++ ) C[ i ] = 0; for( j = 1; j <= ilosc; j++ ) C[ A[ j ] ] = C[ A[ j ] ] + 1; for( i = 2; i <= IleJestLiter; i++ ) C[ i ] = C[ i ] + C[ i - 1 ]; for( j = MaxIloscNapisow; j > 0; j-- ) { B[ C[ A[ j ] ] ] = A[ j ]; C[ A[ j ] ] = C[ A[ j ] ] - 1; } }
void drukuj( char ** tablica, int ilosc ) { int i; for( i = 1; i <= ilosc; i++ ) printf( "%s \n", tablica[ i ] ); }
void czytaj( char ** tablica, int ilosc ) { char slowo[ MaxDlugoscNapisu ]; int i; for( i = 1; i <= ilosc; i++ ) { scanf( "%s", slowo ); tablica[ i ] =( char * ) malloc( sizeof( char ) * MaxDlugoscNapisu ); strcpy( tablica[ i ], slowo ); } }
int main() { A =( char ** ) malloc( MaxIloscNapisow * sizeof( char * ) ); B =( char ** ) malloc( MaxIloscNapisow * sizeof( char * ) ); C =( char ** ) malloc( MaxIloscNapisow * sizeof( char * ) ); printf( "Wpisz napisy do tablicy A:\n" ); czytaj( A, MaxIloscNapisow ); Zliczanie( A, B, MaxIloscNapisow ); printf( "Posortowana tablica ze wzgl na pierwszy znak:\n" ); drukuj( B, MaxIloscNapisow ); return 0; } |
|
mateczek |
» 2016-11-22 05:01:04 funkcja zliczanie wydaje się być wyrwana z kosmosu!!! jest jakby pisana dla pojedynczych tablic znaków a ty tam ładujesz tablice napisów ?? poza tym o ile rozumiem idee tego sortowania to dla napisów się to nie nada bo jeśli występują dwa napisy zaczynające się od litery "a" to w pomocniczej tablicy nie da się pod indexem "tab[ a ]" zapisać obydwóch (licznik wystąpień jest tu bezużyteczny). |
|
kkkkkkkkkkk Temat założony przez niniejszego użytkownika |
» 2016-11-22 09:57:39 Właśnie mam problem z modyfikacją tego dla tablic napisów. W jaki sposób mogę to najprościej zmienić? |
|
mateczek |
» 2016-11-22 10:40:45 masz w c++ na stringach Moim zdaniem patent się nie nadaje do sortowania napisów bo nie da się w prosty sposób przechować większej liczby napisów pod tym samym indexem w tablicy #include<iostream> #include<string> using namespace std; int main() { string tab[ 5 ] = { "bolek", "ala", "zenon", "piotrek", "marek" }; string tabPomocnicza[ 'z' - 'a' + 1 ] = { "" }; for( int i = 0; i < 5; i++ ) { int index = tab[ i ][ 0 ] - 'a'; tabPomocnicza[ index ] = tab[ i ]; } for( int i = 0; i <=( 'z' - 'a' ); i++ ) { if( tabPomocnicza[ i ] != "" ) cout << tabPomocnicza[ i ] << endl; } } |
|
« 1 » |