9 СТРУКТУРА ПРОГРАММЫ
Программа, описанная в следующем примере, вводит до MAXLINES строк со стандартного входа, сортирует строки в лексикографическом порядке, возрастающем или уменьшающемся в зависимости от признака, передаваемого функции mainQ через аргумент argv Затем программа записывает отсортированные строки на стандартный выход Стандартными входом и выходом (stdin и stdout) могут быть терминал, канал или некоторый файл
bblsort.h
А#define MAXLINES 100
“define LINLSIZE (132+1)
main.c
ю “include (stdio h> “include "bblsort h"
char Lme[MAXLINES]ELINESIZE], /* буфер строк */ С int Revfig , /* признак направления * сортировки */
/*
* сортировка строк текста в лексикографическом порядке
*/
56 Структура программы
niain(argc, argv)
D char **argv, /* аргументы вызова программы */
int argc, /* число аргументов */
{.
д- mt rdlinesO;
void bblsortO, wrlines();
F int numlines;
G Revflg = (argc > 1 && |argv[l][0] [ == '-');
numlines = rdlinesO;
bblsort(numlmes);
wrlines(numlines),
/*
* запись строк со стандартного выхода
*/
Н static int rdlinesO
chai^ *fgets(), / register int l;
/ foi(i=0,i< MAXLINES; i++)
if (fgets(Lme[i], LINESIZE, stdin)
/ == ] (char *)NULL ) break;
return (i);
} /*
* запись строк на стандартный выход
*/
Структура программы 57
К static void wrhnes(n) L register mt n; /* число строк */
{
register int l,
for (i = 0; i < n; i++) fputs(Lme [i], stdout);
bblsort.c
M # include "bblsort.h"
N extern char Line [] [LINESIZE]; [
/* ,* bubble sort
*/ 0 void
bblsort(n) register int n; /* число строк */
int lexcmp();
void swap();
regicterint i,j;
for (i = 1; i <= n - 1; i++) for(J=n- 1;j>= i;J—) if (lexcmp(j - 1, J)) swapO - l.j);
58 Структура программы
/*
* лексикографическое сравнение двух строк
*/
static int lexcmp(i,J)
Р register int i, j; /* элементы массива строк */ {
q mt strcmpO;
extern int Revflg;
register int Ic;
Ic = strcmp(Line [i], Line [j]);
d return ((Ic < 0 && Revflg)