#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#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;
}