#include #include #include /* Sortiranje rjecnika. */ /* Osnovna varijanta unosa rijeci. */ /* Funkcija my_gets za citanje stringa. */ #include "my_gets.c" /* Simbolicke konstante: MAXBROJ = max. broj rijeci, MAXDULJ = max. duljina pojedine rijeci. */ #define MAXBROJ 100 #define MAXDULJ 80 /* Globalno polje znakova za rjecnik. */ char w[MAXBROJ * MAXDULJ]; /* Globalno polje pokazivaca na pojedine rijeci - stringove. */ char *p[MAXBROJ]; /* Stvarni broj rijeci u rjecniku. */ int broj_rijeci; /* Ucitava rijeci i vraca broj rijeci. Kraj ucitavanja je prazna rijec. */ int unos(char *p[]) { char *q = w; int broj = 0, dulj; while (1) { if (broj >= MAXBROJ) return -1; p[broj] = my_gets(q, MAXDULJ); if ((dulj = strlen(q)) == 0) break; q += dulj + 1; ++broj; } return broj; } /* Sortiranje rjecnika izborom ekstrema. Dovodimo najmanji element na pocetak. Rjecnik je zadan poljem pokazivaca na rijeci (element polja je pokazivac na znak-string). Koristimo samo zamjene pokazivaca. */ void sort(char *p[], int n) { int i, j, ind_min; char *temp; for (i = 0; i < n - 1; ++i) { ind_min = i; for (j = i + 1; j < n; ++j) if (strcmp(p[j], p[ind_min]) < 0) ind_min = j; if (i != ind_min) { temp = p[i]; p[i] = p[ind_min]; p[ind_min] = temp; } } return; } /* Ispisuje sve rijeci u rjecniku. */ void ispis(char *p[]) { int i; for (i = 0; i < broj_rijeci; ++i) puts(p[i]); return; } /* Glavni program. */ int main(void) { if ((broj_rijeci = unos(p)) >= 0) { printf("Broj rijeci = %d\n", broj_rijeci); sort(p, broj_rijeci); ispis(p); } else printf("Previse rijeci na ulazu.\n"); return 0; }