Хрестоматия по программированию на Си в Unix


Текстовая обработка. Хрестоматия по программированию на Си в Unix - стр. 5


Напишите программу, разбивающую файл на два по вертикали: в первый файл попадает левая половина исходного файла, во второй - правая. Ширину колонки задавайте из аргументов main(). Если же аргумент не указан - 40 позиций.

Напишите программу сортировки строк в алфавитном порядке. Учтите, что функция strcmp() сравнивает строки в порядке кодировки, принятой на данной конкретной машине. Русские буквы, как правило, идут не в алфавитном порядке! Следует написать функцию для алфавитного сравнения отдельных символов и, пользуясь ею, переписать функцию strcmp().

Отсортируйте массив строк по лексикографическому убыванию, игнорируя различия между строчными и прописными буквами.

Составьте программу дихотомического поиска в отсортированном массиве строк (методом деления пополам).

/* Поиск в таблице методом половинного деления: dihotomia */ #include <stdio.h>

struct elem { char *name; /* ключ поиска */ int value; } table[] = { /* имена строго по алфавиту */ { "andrew", 17 }, { "bill", 23 }, { "george", 55 }, { "jack", 54 }, { "jaw", 43 }, { "john", 33 }, { "mike", 99 }, { "paul", 21 }, { "sue", 66 }, /* SIZE - 2 */

{ NULL, -1 }, /* SIZE - 1 */ /* NULL введен только для распечатки таблицы */ };

#define SIZE (sizeof(table) / sizeof(struct elem))

/* Дихотомический поиск по таблице */ struct elem *find(s, table, size) char *s; /* что найти ? */ struct elem table[]; /* в чем ? */ int size; /* среди первых size элементов */ { register top, bottom, middle; register code;

top = 0; /* начало */ bottom = size - 1; /* конец: индекс строки "sue" */

while( top <= bottom ){ middle = (top + bottom) / 2; /* середина */

/* сравнить строки */ code = strcmp( s, table[middle].name ) ;

if( code > 0 ){ top = middle + 1; }else if( code < 0 ){ bottom = middle - 1; }else return &table[ middle ];

} return (struct elem *) NULL; /* не нашел */ }

/* распечатка таблицы */ void printtable(tbl) register struct elem *tbl; { for( ; tbl->name != NULL ; tbl++ ){ printf( "%-15s %d\n", tbl->name, tbl->value ); } }




Начало  Назад  Вперед



Книжный магазин