[C] sortowanie alfabetyczne wiersza
Ostatnio zmodyfikowano 2015-04-12 22:31
simple Temat założony przez niniejszego użytkownika |
[C] sortowanie alfabetyczne wiersza » 2015-04-12 21:58:20 Witam, musze napisac program, edytor tekstu, w ktorym wprowadzam tekst w wierszach az napotka wiersz pusty, a nastepnie posortuje alfabetycznie linie tekstu. Kod ktory mam wyglada tak, lecz wyskakuja bledy, moze ktos podpowiedziec co robie nie tak? Btw wolalbym zostac przy sortowaniu babelkowym. #include <stdio.h> #include <string.h>
#define MAX_LINE_SIZE 200 #define MAX_LINES 100
void sortuj( char bufor[ MAX_LINES ][ MAX_LINE_SIZE ] ) { int i, j, k; char tmp; for( i = MAX_LINES; i > 0; --i ) { for( k = MAX_LINE_SIZE; k > 0; --k ) { for( j = 0; j < k; ++j ) { if( strcmpi( bufor[ k ], bufor[ j ] ) > 0 ) { tmp = bufor[ j ][ i ]; bufor[ j ][ i ] = bufor[ j + 1 ][ i ]; bufor[ j ][ i ] = tmp; } } } } }
void zeruj_bufor( char bufor[ MAX_LINES ][ MAX_LINE_SIZE ] ) { int i, j; for( i = 0; i < MAX_LINES; i++ ) { for( j = 0; j < MAX_LINE_SIZE; j++ ) { bufor[ i ][ j ] = 0; } } }
void wpisz_tekst( char bufor[ MAX_LINES ][ MAX_LINE_SIZE ] ) { int i = 0; char * pozycja; printf( "----- Wprowadz tekst. Aby zakonczyc, wprowadz pusta linie. -----\n" ); while( i < MAX_LINES ) { fgets( bufor[ i ], MAX_LINE_SIZE, stdin ); while( pozycja = strchr( bufor[ i ], '\n' ) ) { * pozycja = 0; } if( strlen( bufor[ i ] ) > 0 ) { i = i + 1; } else { return; } } }
void wypisz_bufor( char bufor[ MAX_LINES ][ MAX_LINE_SIZE ] ) { int i; printf( "----- Zawartosc bufora -----\n" ); for( i = 0; i < MAX_LINES; i++ ) { if( strlen( bufor[ i ] ) > 0 ) { printf( "%s\n", bufor[ i ] ); } else { printf( "------- Koniec bufora ------\n" ); return; } } }
int main( int argc, char * argv[] ) { char bufor[ MAX_LINES ][ MAX_LINE_SIZE ]; char c; zeruj_bufor( bufor ); while( 1 ) { printf( "\nWybierz operacje:\n" ); printf( " W - wczytaj tekst\n" ); printf( " P - pokaz bufor\n" ); printf( " D - kasuj tekst\n" ); printf( " E - koniec programu\n" ); printf( " K - sortuj\n" ); c = getc( stdin ); fflush( stdin ); switch( c ) { case 'K': case 'k': sortuj( bufor ); break; case 'E': case 'e': return 0; case 'W': case 'w': wpisz_tekst( bufor ); break; case 'P': case 'p': wypisz_bufor( bufor ); break; case 'D': case 'd': zeruj_bufor( bufor ); break; default: printf( "\n!!! Błędna opcja !!!\n" ); } } return 0; }
|
|
simple Temat założony przez niniejszego użytkownika |
» 2015-04-12 22:19:39 edit.
jak w funkcji sortuj skorzystac z strcmpi? Ewentualnie co moge wykorzystac/ jak inaczej obejść ten problem? |
|
michal11 |
» 2015-04-12 22:31:19 strcmpi służy do porównywania c-stringów a z tego co widzę ty chcesz porównywać pojedyncze znaki, czyli de facto zwykłe chary. W takim wypadku wystarczy zwykły operator == . |
|
« 1 » |