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 |