- •Часть 2
- •Введение
- •4. Лабораторная работа № 4
- •1.Работа с текстом
- •2.Строковый тип
- •3. Представление текста
- •5. Лабораторная работа № 5
- •Понятие технологии программирования
- •2.Понятие модульного программирования
- •3.Подпрограмма
- •4.Функции языка Си
- •5.Объекты программы и их взаимодействие
- •6. Лабораторная работа № 6
- •Тип структура
- •Указания
- •Заключение
- •Библиографический список
- •Часть 2
- •394026 Воронеж, Московский просп., 14
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, если заданный символ не найден. |