Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 300070.doc
Скачиваний:
6
Добавлен:
30.04.2022
Размер:
295.42 Кб
Скачать

3. Представление текста

Исходный текст это, как правило, последовательность символов, состоящая из слов, разделенных символами-разделителями и оканчивающаяся символом-признаком конца текста. При выборе структуры данных для отображения текста надо стремиться к тому, чтобы текст занимал минимально необходимый объем памяти, и выбранная структура предоставляла средства для быстрого (непосредственного) обращения к элементам текста, которыми, как правило, являются его слова. Таким требованиям отвечает структура данных – массив. Текст можно представить:

  • двумерным массивом - матрицей, строка которой это слово текста, оканчивающееся символом конца

строки-‘\0’. Количество столбцов равно максимальной длине слова плюс один (символ ‘\0’). Количество строк равно максимальному числу слов в тексте. Обращение к строке матрицы это обращение к слову. Чтобы создать такую структуру, надо читать текст посимвольно, помещая каждое очередное слово в новую строку матрицы и добавляя к слову символ ‘\0’.

  • одномерным массивом – строкой. Такая структура полностью соответствует внешнему представлению

текста. Размер массива равен максимальной длине исходного текста с учетом разделителей. Чтобы обратиться к слову, необходимо последовательно просматривать символы массива, обнаруживая очередной символ-разделитель, который завершает текущее слово, за ним начинается новое слово. Так продолжаем, пока очередное слово не завершится признаком конца строки. Для создания массива-строки можно использовать функцию gets из библиотеки stdio.h – cчитывание строки из стандартного входного файла. Исходный текст должен завершаться символом новой строки ’\n’, который не включается в результирующую строку, символ ‘\0’ добавляется к строке автоматически. Также можно использовать функцию scanf со спецификацией преобразования %s, «нуль-литера» добавляется к строке автоматически.

Для выделения слова из строки можно использовать функцию работы со строками strtok.

Например:

{

char stroka[55], *razd = “, .;:?!”, *sl;

gets(stroka);

sl = strtok (stroka, razd);

while ( sl )

{

обработка выделенного слова sl;

sl = strtok (NULL, razd);

}

}

Контрольные вопросы

1. Конструирование строкового типа.

2. Стандартные функции работы со строками.

3. Способы представления текста в памяти.

7. Ввод-вывод текстовой информации.

Таблица4.1

Основные стандартные функции для работы со строками

Функция

Прототип и краткое описание функции

strcat

char *strcat(char *st1, char *st2);

Добавляет строку st2 в конец строки st1.

strcmp

int strcmp(char *st1, char *st2);

Лексикографески сравнивает строки st1 и st2. Результат отрицателен, если

st1< st2; равен нулю, если st1 ==st2; положителен, если st1 > st2

strcpy

char *strcpy(char *st1, char *st2);

Копирует строку st2 в строку st1.

Продолжение Таблицы 4.1

strcspn

int strcspn(char *st1, char *st2);

Вычисляет индекс первого символа строки st1, который принадлежит набору символов строки st2 (это эквивалентно длине начальной подстроки st1, которая не содержит ни одного символа из набора символов st2).

strlen

unsigned int strlen(char *st);

Вычисляет длину строки st ( в байтах, не учитывая символ ‘\0’).

strrev

сhar *strrev(char *st);

Переворачивает строку st (т.е. меняет порядок символов на противоположный).

strspn

int strspn(char *st1, char *st2);

Вычисляет индекс первого символа строки st1, который не принадлежит набору символов строки st2 (это эквивалентно длине начальной подстроки st1, которая содержит только символы из набора символов st2).

Продолжение Таблицы 4.1

strstr

char *strstr(const char *st1, const char *st2);

Поиск первого вхождения строки st2 в строку st1. Возвращает указатель на символ, с которого начинается первое вхождение или NULL, если вхождение не найдено.

strtok

char *strtok(const char *st1, const char *st2);

Поиск в строке st1 лексем (слов), разделенных символами-разделителями из строки st2. При первом вызове strtok возвращает указатель на первое слово (первый символ) st1. Чтобы найти начало следующего слова в st1, необходимо вызвать функцию strtok, задавая первый параметр NULL-значением. Набор символов-разделителей может от вызова к вызову различаться ( т.е. второй параметр может при каждом вызове быть другим). Когда при очередном вызове в st1 нет больше слов, функция возвращает NULL.

Продолжение Таблицы 4.1

strchr

char *strchr(char *st, int c);

Поиск первого вхождения символа c в строку st. Возвращает указатель на первое вхождение символа или NULL, если вхождение не найдено.

strncat

char *strncat(char *st1, char *st2, int kol);

Добавляет kol первых символов строки st2 в строку st1.

strncmp

int strncmp(char *st1, char *st2, int kol);

Сравнивает лексикографически первые kol символов строк st1 и st2. Результат аналогичен результату strcmp.

strncpy

char *strncpy(char *st1, char *st2, int kol);

Копирует первые kol символов строки st2 в строку st1 (если значение kol меньше длины st2, то символ ‘\0’ не добавляется в новую строку).

strnicmp

char *strnicmp(char *st1, char*st2,int kol);Аналогично функции strncmp только не делает различий между заглавными и строчными буквами (т.е. не различает регистры).

Продолжение Таблицы 4.1

strnset

char *strnset(char *st, int c, int kol);

Заменяет первые kol символов строки st символом c.

strpbrk

сhar *strpbrk(char *st1, char *st2);

Поиск в строке st1 первого вхождения любого из символов строки st2. Возвращает указатель на первое вхождение или NULL, если нет общих символов в строках.

strrchr

сhar *strrchr(char *st, int c);

Поиск в строке st последнего вхождения символа c. Возвращает указатель на последнее вхождение символа или NULL, если заданный символ не найден.