#define TABSTORL 200 #define SUFSTORL 78 #define sann 1 #define falsk 0 char QaQ[] = "a"; char QQ[] = ""; char *suffixtab[] = { "ad",QaQ, "ade",QaQ, "ades",QaQ, "aktig",QQ, "an",QaQ, "ande",QaQ, "anden", QaQ, "andena", QaQ, "andet", QaQ, "ar",QaQ, "are",QQ, "aren",QaQ, "arens",QaQ, "ares",QaQ, "arna",QQ, "arnas",QQ, "ast", QQ, "aste", QQ, "at", QaQ, "ats", QaQ, "bar", QaQ, "bart", QaQ, "sbar", "sbar", "sbart", "sbart", "de", QaQ, "des", QaQ, "else", QaQ, "elsen",QaQ, "elser",QaQ, "elserna",QaQ, "en", QQ, "ens", QQ, "ende", QQ, "endet",QQ, "er", QaQ, "erat", "era", "ers", QQ, "erna", QQ, "ernas",QQ, "et", QQ, "ets", QQ, "het", QQ, "heten",QQ, "hetens",QQ, "heter",QQ, "heterna",QQ, "heternas",QQ, "ig", QQ, "iga", QQ, "igare",QQ, "igast",QQ, "igt", QQ, "ing", QaQ, "ingar",QaQ, "ingen",QaQ, "isering",QaQ, "isk", QQ, "iska", QQ, "iskt", QQ, "lig", QQ, "liga", QQ, "ligare", QQ, "ligast", QQ, "ligaste", QQ, "ligheter", QQ, "ligheterna", QQ, "ligheternas", QQ, "ligt", QQ, "man", QQ, "na", "en", "nad", "na", "nad", "na", "nades", "na", "nde", "nna", "ning", QaQ, "or", QaQ, "orna", "a", "rer", "r", "s", QQ }; char tecken[TABSTORL]; int missl[TABSTORL], lyckad[TABSTORL]; char *kod[TABSTORL]; int fri; initsuf() { int i; for(i=0; i=0; j--) { while(ord[j] != tecken[rad] ) if(missl[rad] != 0) rad = missl[rad]; else return(slutkod); if(kod[rad] != 0) { slutkod = kod[rad]; *slutpos = j; } if(lyckad[rad] != 0) rad = lyckad[rad]; else return(slutkod); } return(slutkod); } int suffix(ord,ord2) char *ord, *ord2; { int slutpos; char *sufbyte; sufbyte = letaord(ord,&slutpos); if(sufbyte == 0) return(falsk); strncpy(ord2,ord,slutpos); ord2[slutpos] = '\0'; strcat(ord2,sufbyte); return(sann); } placeraord(ord,slutkod) char *ord; char *slutkod; { int rad, j, senasterad; senasterad = rad = 0; for(j=strlen(ord)-1; j>=0; j--) { while(ord[j] != tecken[rad] ) if(missl[rad] != 0) rad = missl[rad]; else { missl[rad] = fri; tecken[fri] = ord[j]; rad = fri; if(++fri >= TABSTORL) { printf("\nsuffix: tabellen full"); exit(1); } j--; for(;j>=0; j--){ lyckad[rad] = fri; tecken[fri] = ord[j]; rad=fri; if(++fri >= TABSTORL) { printf("\nsuffix: tabellen full"); exit(1); } } kod[rad] = slutkod; return; } if(lyckad[rad] != 0) { senasterad = rad; rad = lyckad[rad]; } else { j--; for(;j>=0; j--){ lyckad[rad] = fri; tecken[fri] = ord[j]; rad=fri; if(++fri >= TABSTORL) { printf("\nsuffix: tabellen full"); exit(1); } } kod[rad] = slutkod; return; } } kod[senasterad] = slutkod; } skrivtabell() { int i; printf("\nrad missl lyckad kod tecken"); for(i=0; i