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

[C] sortowanie alfabetyczne wiersza

Ostatnio zmodyfikowano 2015-04-12 22:31
Autor Wiadomość
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.

C/C++
#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;
        }
    }
}

// Wprowadzanie tekstu do bufora. Tekst wprowadzany jest linia po linii, aż do napotkania pierwszej
// pustej linii.
void wpisz_tekst( char bufor[ MAX_LINES ][ MAX_LINE_SIZE ] )
{
    int i = 0;
    char * pozycja;
   
    // Wyœwietl podpowiedŸ odnoœnie wprowadzania
    printf( "----- Wprowadz tekst. Aby zakonczyc, wprowadz pusta linie. -----\n" );
   
    while( i < MAX_LINES )
    {
        // Wczytaj linię i usuń końcowy znak nowej linii
        fgets( bufor[ i ], MAX_LINE_SIZE, stdin );
        while( pozycja = strchr( bufor[ i ], '\n' ) )
        {
            * pozycja = 0;
        }
       
        // SprawdŸ, czy to ostatnia linia (tzn. czy wprowadzono pustš linię).
        // Jeœli tak, to zakończ wprowadzanie
        if( strlen( bufor[ i ] ) > 0 )
        {
            i = i + 1;
        }
        else {
            return;
        }
    }
}

// Wyœwietl zawartoœć bufora. Przewrij na pierwszej pustej linii
void wypisz_bufor( char bufor[ MAX_LINES ][ MAX_LINE_SIZE ] )
{
    int i;
   
    // Wyœwietl komunikat poczatkowy
    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[] )
{
    // Nasze zmienne
    char bufor[ MAX_LINES ][ MAX_LINE_SIZE ];
    char c;
   
    // Zeruj bufor
    zeruj_bufor( bufor );
   
    // Mamy działanie z menu, więc tutaj dajemy pętlę nieskończonš
    while( 1 )
    {
        // Wypisz polecenia menu
        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" );
       
        // Wczytaj wybór i zignoruj kolejne znaki
        c = getc( stdin );
        fflush( stdin );
       
        // Podejmij wybrane działanie
        switch( c )
        {
        case 'K':
        case 'k':
            sortuj( bufor );
            break;
           
        case 'E': // Zakończ program
        case 'e':
            return 0;
           
        case 'W': // Wpisz tekst
        case 'w':
            wpisz_tekst( bufor );
            break;
           
        case 'P': // Wyœwietl tekst
        case 'p':
            wypisz_bufor( bufor );
            break;
           
        case 'D': // Usuń bufor
        case 'd':
            zeruj_bufor( bufor );
            break;
           
            default:
            printf( "\n!!! Błędna opcja !!!\n" );
        }
       
    }
   
    return 0;
}
P-130727
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?
P-130732
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 == .
P-130740
« 1 »
  Strona 1 z 1