#include #include #include #include #define MAX 21 typedef struct uzel { char slovo[MAX]; char preklad[MAX]; struct uzel *dalsi; } UZEL; typedef UZEL *PUZEL; PUZEL nacti_slovnik(); PUZEL najdi_slovo( PUZEL koren, char *slovo); int main() { PUZEL koren; if ( (koren = nacti_slovnik()) == NULL) return 1; char c = getchar(); char buffer[MAX+1]; int pocet; PUZEL kde; while ( c != EOF ) { pocet = 0; while ( isalpha(c) && pocet < MAX) { buffer[pocet] = c; pocet++; c = getchar(); } if ( pocet < MAX ) { buffer[pocet] = '\0'; if ( (kde = najdi_slovo( koren, buffer)) != NULL) printf( "%s", kde->preklad); else printf( "%s", buffer); } else { buffer[MAX] = '\0'; printf( "%s", buffer); while ( isalpha( c)) { printf("%c", c); c = getchar(); } } while ( !(isalpha( c) || c == EOF)) { printf("%c", c); c = getchar(); } } PUZEL smaz; while ( koren != NULL) { smaz = koren; koren = koren->dalsi; free( smaz); } return 0; } PUZEL najdi_slovo( PUZEL koren, char *slovo) { while ( koren != NULL) { if ( strcmp(koren->slovo, slovo) == 0) return koren; else koren = koren->dalsi; } return koren; } PUZEL nacti_slovnik() { FILE *f; PUZEL koren, novy; char c; int pocet; char buffer1[MAX], buffer2[MAX]; if ( (f = fopen( "slovnik.txt", "r")) == NULL) { printf( "Nepodarilo se otevrit soubor."); return NULL; } koren = ( PUZEL) malloc( sizeof(UZEL)); koren->dalsi = NULL; koren->slovo[0] = '\0'; koren->preklad[0] = '\0'; while ( (c = getc( f)) != EOF) { pocet = 0; while ( isalpha( c) && pocet < MAX) { buffer1[pocet] = c; pocet++; c = getc( f); } if ( pocet < MAX ) { buffer1[pocet] = '\0'; pocet = 0; while ( isalpha( (c = getc( f))) && pocet < MAX) { buffer2[pocet] = c; pocet++; } if ( pocet < MAX ) { buffer2[pocet] = '\0'; novy = ( PUZEL) malloc( sizeof( UZEL)); strcpy( novy->slovo, buffer1); strcpy( novy->preklad, buffer2); novy->dalsi = NULL; novy->dalsi = koren; koren = novy; } } while ( !( c == '\n' || c == EOF)) c = getc( f); } return koren; }