Язык программирования C

Скачать в pdf «Язык программирования C»


И здесь на сцену выходит массив указателей. Если сортируемые строки располагаются в одном длинном символьном массиве вплотную — начало одной к концу другой, то к каждой строке можно обращаться по указателю на ее первый символ. Сами же указатели можно поместить в массив. Две строки можно сравнить, передав указатели на них в функцию stгетр. Если необходимо поменять местами две строки, стоящие в неправильном порядке, то обмениваются только указатели на них в массиве указателей, а не сами строки текста.

Благодаря этому устраняются сразу две взаимосвязанные проблемы: сложность управления памятью и дополнительный расход ресурсов на перемещение строк символов. Процесс сортировки состоит из трех этапов:


считать все строки из входного потока отсортировать строки


вывести их в отсортированном порядке


Как обычно, лучше всего будет разделить программу на функции, которые соответствуют этому естественному делению задачи, а на функцию main возложить обязанности по управлению ими. Давайте пока оставим в стороне процесс сортировки, сосредоточившись на структуре данных и вводе-выводе.


Функция ввода должна накапливать и сохранять символы каждой строки, а также строить массив указателей на строки. Ей также придется подсчитывать количество поступающих строк, поскольку это необходимо знать при сортировке и выводе. Функция ввода может справиться только с ограниченным количеством строк, поэтому она должна возвращать некое нереальное количество — например, -1 — в качестве сигнала о том, что входных данных слишком много.


Функция вывода должна всего лишь вывести строки в том же порядке, в каком они расставлены в массиве указателей.


#include <stdio.h>


#include <string.h>


#define MAXLINES 5000    /* максимальное количество сортируемых строк */


char *lineptr[MAXLINES]; /* указатели на строки */

Скачать в pdf «Язык программирования C»