#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define SIZE 29
typedef struct slownik
{
struct slownik *t[SIZE];
} USS, *USS_PTR;
void zapisz(char *slowo, USS_PTR p);
int do_indeksu(char c);
char z_indeksu(int n);
void pisz_slownik(USS_PTR p);
int main()
{
int i = 0;
USS_PTR p;
p = (USS_PTR) malloc (sizeof(USS));
for(i = 0; i < SIZE; p->t[i++] = NULL);
zapisz("ALF",p);
zapisz("ALFABET",p);
zapisz("ALFABETYCZNIE",p);
//zapisz("ANAGRAM",p);
//zapisz("ANONIM",p);
//zapisz("ASTRONOMIA",p);
//zapisz("ANKARA",p);
pisz_slownik(p);
return 0;
}
void zapisz(char *slowo, USS_PTR p)
{
USS_PTR q;
int pos;
int i = 1;
int k = 0;
//q = malloc (sizeof(USS));
for (; i <= strlen(slowo); i++)
{
pos = do_indeksu(slowo[i-1]);
if(p->t[pos] != NULL)
p = p->t[pos];
else
{
q = (USS_PTR) malloc (sizeof(USS));
p->t[pos] = q;
for(; k<SIZE; q->t[k++] = NULL);
p=q;
}
}
p -> t[SIZE-1]= p;
}
int do_indeksu(char c)
{
if((( c <= 'Z') && (c >='A')) || ((c <= 'z') && (c >= 'a')))
return toupper(c) - 'A';
else
{
if(c == ' ') return 26;
if(c == '-') return 27;
}
return 0;
}
char z_indeksu(int n)
{
if ( n >= 0 && n<= ('Z' - 'A') )
return toupper((char) n+ 'A');
else
{
if(n==26) return ' ';
if(n==27) return '-';
}
return 0;
}
void pisz_slownik(USS_PTR p)
{
int i;
for(i=0; i<26;i++)
{
if(p->t[i] != NULL)
{
if((p->t[i])->t[SIZE-1] == p->t[i])
printf("%c\n", z_indeksu(i));
else
printf("%c", z_indeksu(i));
printf("---");
pisz_slownik(p->t[i]);
}
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCiNkZWZpbmUgU0laRSAyOQoKdHlwZWRlZiBzdHJ1Y3Qgc2xvd25pawp7CiAgICBzdHJ1Y3Qgc2xvd25payAqdFtTSVpFXTsKfSBVU1MsICpVU1NfUFRSOwoKCnZvaWQgemFwaXN6KGNoYXIgKnNsb3dvLCBVU1NfUFRSIHApOwppbnQgZG9faW5kZWtzdShjaGFyIGMpOwpjaGFyIHpfaW5kZWtzdShpbnQgbik7CnZvaWQgcGlzel9zbG93bmlrKFVTU19QVFIgcCk7CgppbnQgbWFpbigpCnsKICAgIGludCBpID0gMDsKICAgIFVTU19QVFIgcDsKICAgIHAgPSAoVVNTX1BUUikgbWFsbG9jIChzaXplb2YoVVNTKSk7CgogICAgZm9yKGkgPSAwOyBpIDwgU0laRTsgcC0+dFtpKytdID0gTlVMTCk7CgogICAgemFwaXN6KCJBTEYiLHApOwogICAgemFwaXN6KCJBTEZBQkVUIixwKTsKICAgIHphcGlzeigiQUxGQUJFVFlDWk5JRSIscCk7CiAgICAvL3phcGlzeigiQU5BR1JBTSIscCk7CiAgICAvL3phcGlzeigiQU5PTklNIixwKTsKICAgIC8vemFwaXN6KCJBU1RST05PTUlBIixwKTsKICAgIC8vemFwaXN6KCJBTktBUkEiLHApOwoKICAgIHBpc3pfc2xvd25payhwKTsKCiAgICByZXR1cm4gMDsKfQoKdm9pZCB6YXBpc3ooY2hhciAqc2xvd28sIFVTU19QVFIgcCkKewogICAgVVNTX1BUUiBxOwogICAgaW50IHBvczsKICAgIGludCBpID0gMTsKICAgIGludCBrID0gMDsKCiAgICAvL3EgPSBtYWxsb2MgKHNpemVvZihVU1MpKTsKCiAgICBmb3IgKDsgaSA8PSBzdHJsZW4oc2xvd28pOyBpKyspCiAgICB7CiAgICAgICAgcG9zID0gZG9faW5kZWtzdShzbG93b1tpLTFdKTsKCiAgICAgICAgaWYocC0+dFtwb3NdICE9IE5VTEwpCiAgICAgICAgICAgIHAgPSBwLT50W3Bvc107CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcSA9IChVU1NfUFRSKSBtYWxsb2MgKHNpemVvZihVU1MpKTsKICAgICAgICAgICAgcC0+dFtwb3NdID0gcTsKCiAgICAgICAgICAgIGZvcig7IGs8U0laRTsgcS0+dFtrKytdID0gTlVMTCk7CiAgICAgICAgICAgIHA9cTsKICAgICAgICB9CiAgICB9CgogICAgcCAtPiB0W1NJWkUtMV09IHA7Cn0KCgppbnQgZG9faW5kZWtzdShjaGFyIGMpCnsKICAgIGlmKCgoIGMgPD0gJ1onKSAmJiAoYyA+PSdBJykpIHx8ICgoYyA8PSAneicpICYmIChjID49ICdhJykpKQogICAgICAgIHJldHVybiB0b3VwcGVyKGMpIC0gJ0EnOwogICAgZWxzZQogICAgewogICAgICAgIGlmKGMgPT0gJyAnKSByZXR1cm4gMjY7CiAgICAgICAgaWYoYyA9PSAnLScpIHJldHVybiAyNzsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKY2hhciB6X2luZGVrc3UoaW50IG4pCnsKICAgIGlmICggbiAgPj0gMCAmJiBuPD0gKCdaJyAtICdBJykgKQogICAgICAgIHJldHVybiB0b3VwcGVyKChjaGFyKSBuKyAnQScpOwogICAgZWxzZQogICAgewogICAgICAgIGlmKG49PTI2KSByZXR1cm4gJyAnOwogICAgICAgIGlmKG49PTI3KSByZXR1cm4gJy0nOwogICAgfQoKICAgIHJldHVybiAwOwp9Cgp2b2lkIHBpc3pfc2xvd25payhVU1NfUFRSIHApCnsKICAgIGludCBpOwoKICAgIGZvcihpPTA7IGk8MjY7aSsrKQogICAgewogICAgICAgIGlmKHAtPnRbaV0gIT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKChwLT50W2ldKS0+dFtTSVpFLTFdID09IHAtPnRbaV0pCiAgICAgICAgICAgICAgICBwcmludGYoIiVjXG4iLCB6X2luZGVrc3UoaSkpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludGYoIiVjIiwgel9pbmRla3N1KGkpKTsKCiAgICAgICAgICAgIHByaW50ZigiLS0tIik7CiAgICAgICAgICAgIHBpc3pfc2xvd25payhwLT50W2ldKTsKICAgICAgICB9CiAgICB9Cn0K