Datei: p7-9.c


    1   /*
    2    *      p7-9.c
    3    *      Beispielprogramm 9, Abschnitt 7
    4    *      Programm zum Einlesen, alphabetischen Sortieren
    5    *      und Ausgeben von Eingabezeilen
    6    */
    7   
    8   #include <stdio.h>
    9   
   10   #define NULL 0
   11   #define LINES 100       /* maximale Anzahl Zeilen */
   12   
   13   void main(void)
   14   {
   15     char *lineptr[LINES]; /* Zeiger auf Textzeilen */
   16     int nlines;           /* Anzahl gelesener Zeilen */
   17     
   18     if ((nlines = readlines(lineptr, LINES)) >= 0) {
   19       sort(lineptr, nlines);
   20       writelines(lineptr, nlines);
   21     } 
   22     else        
   23       printf ("input too big to sort\n");
   24       
   25   } /* main() */
   26    
   27   #define MAXLEN 1000     /* Maximallaenge einer Zeile */
   28   
   29   /* Zeile einlesen */
   30   int getline(char line[], int max)
   31   {
   32     int c, i;
   33     
   34     i = 0;
   35     while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
   36       s[i++] = c;
   37     if (c == '\n')
   38       s[i++] = c;
   39     s[i] = '\0';
   40     return(i);
   41     
   42   } /* getline() */
   43   
   44   /* Eingabezeilen einlesen um sie zu sortieren */
   45   int readlines(char *lineptr[], int maxlines)
   46   {
   47     int len, nlines;
   48     char *p, *malloc(), line[MAXLEN];
   49     
   50     nlines = 0;
   51     while ((len = getline(line, MAXLEN)) > 0)
   52       if (nlines >= maxlines)
   53         return(-1);
   54       else if ((p = malloc(len)) == NULL)
   55         return(-1);
   56       else {
   57         line[len - 1] = '\0'; /* Zeilentrenner entfernen */
   58         strcpy(p, line);
   59         lineptr[nlines++] = p;
   60       }
   61     return(nlines);
   62   
   63   } /* readlines() */
   64   
   65   /* Zeilen ausgeben */
   66   void writelines(char *lineptr[], int nlines)
   67   {
   68    int i;
   69    
   70     for (i = 0; i < nlines; i++)
   71       printf("%s\n", lineptr[i]);
   72   
   73   } /* writelines() */
   74   
   75   /* Zeichenketten v[0],...,[n-1] in aufsteigender Reihen- */
   76   /* folge sortieren, es werden die Zeichenketten */
   77   /* verglichen und ihre Zeiger entsprechend sortiert */
   78   sort(char *v[], int n)
   79   {
   80     int gap, i, j;
   81     char *temp;
   82     
   83     for (gap = n/2; gap > 0; gap /= 2)
   84       for (i = gap; i < n; i++)
   85         for (j = i - gap; j >= 0; j -= gap) {
   86   	if (strcmp(v[j], v[j + gap]) <= 0)
   87   	  break;
   88   	temp = v[j];
   89   	v[j] = v[j + gap];
   90   	v[j + gap] = temp;
   91         }
   92   
   93   } /* sort() */


Erzeugt von c2html 1.01