
- •.Лабораторная работа № 9 Работа со строками
- •9.1.Постановка задачи
- •9.2.Варианты заданий
- •9.3.Методические указания к лабораторной работе
- •9.4.Справочные материалы
- •9.4.1.Понятие о строках
- •9.4.2.Строковые литералы
- •9.4.3.Символические строковые константы
- •9.4.4.Строковые переменные
- •9.4.4.1.Инициализация строковых переменных
- •9.4.4.2.Операции со строковыми переменными
- •9.4.5.Вывод строк
- •9.4.5.1.Вывод строк с помощью функции printf()
- •9.4.5.2.Функция puts()
- •9.4.5.3.Функция fputs()
- •9.4.6.Ввод строк
- •9.4.6.1.Функция scanf()
- •9.4.6.2.Функция gets()
- •9.4.6.3.Использование функции fgets() для консольного ввода строк
- •9.4.7.Стандартные функции для обработки строк
- •9.4.7.1.Функция strlen
- •9.4.7.2.Функции strcpy() и strncpy()
- •9.4.7.3.Функции strcat() и strncat()
- •9.4.7.4.Функция strcmp()
- •9.4.7.5.Функция strtok()
- •9.4.8.Массивы строк
- •9.4.9.Функции пользователя для обработки строк
- •9.4.9.1.Ввод строк
- •9.4.9.2.Вывод строк
- •9.4.9.3.Разделение строки на слова и запись полученных слов в строковый массив
- •9.4.9.4.Объединение в строку слов, содержащихся в строковом массиве
- •9.5.Контрольные вопросы
9.4.4.Строковые переменные
Строковая переменная – массив символов, содержащий последовательность символов, которая заканчивается нуль-символом. Рассмотрим следующий программный код:
#define MAXLENGTH 129 /* ... */
char str1[MAXLENGTH];
Для переменной str1 выделяется память объемом в 129 байт. Потенциально такая переменная может работать со строками, длина которых не превосходит 128 символов. Особенность рассматриваемой переменной состоит в отсутствии явной инициализации. Неявная инициализация этой переменной будет иметь место в том случае, когда ее определение будет находиться вне тела функции. В этом случае массив str1 будет инициализирован нулями, а сама переменная может рассматриваться как пустая строка. В противном случае переменная str1 будет содержать “мусор” и не может использоваться в качестве строки. Это делает целесообразным явно инициализировать строки при их объявлении.
9.4.4.1.Инициализация строковых переменных
Возможны два способа инициализации строковой переменной при ее определении:
инициализация строковым литералом,
инициализация массивом символов.
Приведем примеры явной инициализации строковых переменных при их определении.
Пример 1.
#define MAXLENGTH 129 char str1[MAXLENGTH] = “Hello”;
В этом примере для хранения элементов массива str1 предусмотрено выделение 129 байт памяти, в начало которой будет скопирован строковый литерал. Нуль-символ (\0) в массив str1 будет занесен автоматически.
Пример 2.
#define MAXLENGTH 129 char str2[MAXLENGTH] = “ ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’”;
Второй пример отличается от первого только способом инициализации. Здесь для инициализации используется массив символов. Нуль-символ в этом случае должен быть включен в число инициализаторов.
Обычно используется первый способ инициализации.
Следует отметить, что инициализировать строковую переменную можно только в момент определения. Следующий код содержит ошибку:
Пример 3.
#define MAXLENGTH 129 char str3[MAXLENGTH]; str3 = “Hello”; /* Синтаксическая ошибка*/
Здесь имеет место попытка изменить значение константного указателя, которым является str3.
9.4.4.2.Операции со строковыми переменными
Со строковыми переменными можно выполнять только поэлементные операции. Все остальные операции (ввод и вывод строк, их копирование, объединение, сравнение и др.) следует выполнять с помощью библиотечных функций или разрабатывать собственные функции пользователя.
Для работы с библиотечными функциями следует подключить стандартный заголовочный файл string.h.
9.4.5.Вывод строк
Для ввода строк с клавиатуры можно воспользоваться следующими библиотечными функциями:
printf(),
puts(),
fputs().
Начнем рассмотрение с функции printf().
9.4.5.1.Вывод строк с помощью функции printf()
Строки могут выводиться с помощью библиотечной функции printf(). Для вывода строкового литерала достаточно поместить его текст в форматной строке вызова рассматриваемой функции. Пусть необходимо вывести стандартное приветствие. Например, это можно выполнить с помощью следующего вызова функции printf():
printf(“Hello, world”);
В более сложных случаях следует при выводе строк использовать спецификацию типа s. В качестве примера приведем вывод заголовка таблицы:
printf(“%5s%10s%10s”, “НОМЕР”, “АРГУМЕНТ”, “ФУНКЦИЯ”);
Здесь также необходимо выводить строковые литералы. Однако форматирование вывода лучше предоставить компилятору, а не выполнять вручную в форматной строке.
Теперь приведем пример, в котором будет выводиться строковая переменная:
#include<stdio.h> #define MAXLENGTH 129 int main(void) { char st[MAXLENGTH] = “”; /* Работа со строкой st */ printf(“%s\n”, st); }