- •Федеральное агентство по образованию
- •Краткая история языка с
- •Особенности и основные понятия языка Си
- •Структура программы
- •Типы данных
- •Классификация типов данных
- •Вещественные
- •Логический
- •Диапазоны представления данных
- •Объявление переменных
- •Константы в языке Си
- •Операции языка Си. Приоритет операций
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные операции
- •Операцияsizeof
- •Операция выбора по условию
- •Операция запятая
- •Приведение типов Неявное преобразование типов
- •Явное преобразование типов
- •Основные средства ввода-вывода на Си Понятие потока
- •Стандартные потоки
- •Функции потокового ввода-вывода
- •Функции ввода
- •Ввод символов
- •Ввод строк
- •Форматированный ввод
- •Операторы языка Си
- •Оператор if
- •Оператор switch
- •Оператор while
- •Оператор do while
- •Оператор for
- •Оператор break
- •Оператор continue
- •Функции вывода на экран
- •Вывод символов
- •Функция вывода строк puts()
- •Форматированный вывод
- •Указатели в языке Си
- •Адресная арифметика
- •Массивы
- •Функции в языке с
- •Прототипы функций
- •Указатели типа void
- •Функции, возвращающие указатели
- •Встраиваемые функции
- •Рекурсивные функции
- •Функции с переменным числом аргументов
- •Аргументы функции main()
- •Область действия и область видимости
- •Локальные переменные
- •Локальные переменные в функции Main()
- •Глобальные переменные
- •Классы памяти
- •Указатели на указатели
- •Указатели и многомерные массивы
- •Массивы указателей
- •Указатели на функции
- •Операции над строками символов Определение длины строки
- •Копирование строк
- •Поиск в строках
- •Преобразования символов в строках
- •Другие функции для работы со строками
- •Преобразования строк в числа
- •Преобразования чисел в строки
- •Функции анализа символов
- •Распределение памяти
- •Манипулирование блоками памяти
- •Типы, определяемые пользователем
- •Перечислимый тип
- •Структуры
- •Сложные структуры
- •Битовые поля в структурах
- •Объединения
- •Работа с файлами Связь между потоками и файлами
- •Типы дисковых файлов
- •Открытие файла
- •Запись и чтение данных
- •Форматированный ввод-вывод Форматированный вывод
- •Int fprintf (file *fp, char *fmt, ...);
- •Форматированный ввод
- •Символьный ввод
- •Символьный вывод
- •Блочный ввод-вывод
- •Закрытие файла
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •69 Лекции по курсу «Языки программирования» Часть III
Поиск в строках
Библиотека Си содержит несколько функций, позволяющих выполнять поиск в строках. Всего таких функций шесть, и все они объявлены в заголовочном файле string, h:
strchr()
strrchr()
strcspn()
strspn()
strpbrk()
strstr()
Функция strchr()
Функция strchr() обнаруживает первое вхождение заданного символа в заданной строке. Она имеет следующий прототип:
char *strchr(const char *str, int ch);
Функция strchr() выполняет поиск в строке str слева направо, пока не найдет символ ch или пока строка не закончится нулевым символом.
Если символ ch найден, функция возвращает указатель на него, а в противном случае — NULL.
Итак, когда функция strchr() находит символ, она возвращает указатель (адрес) этого символа. Зная, что str указывает на первый символ в строке, можно вычислить положение искомого символа, отняв str от возвращенного функцией значения.
Функция strrchr()
Библиотечная функция strrchr() по своему назначению идентична функции strchr(), c тем исключением, что она разыскивает последнее вхождение заданного символа в строку.
Она имеет следующий прототип:
char *strrchr(const char *str, int ch);
Функция strstr()
Эта функция ищет первое появление одной строки внутри другой, причем всей строки сразу, а не ее отдельных символов. Функция имеет следующий прототип:
char *strstr(const char *str1, const char *str2);
Функция strstr() возвращает указатель на первую позицию, с которой начинается строка str2 внутри строки strl. Если между строками нет такого соответствия, функция возвращает NULL.
Если вторая строка имеет длину 0, функция возвращает указатель str1.
Найдя место вхождения одной строки в другую, можно вычислить смещение str2 относительно начала str1 с помощью вычитания указателей, как в случае с strchr().
Помните, что у многих функций Си для работы со строками имеются аналоги, которые работают с фрагментами строк заданной длины. Такие функции, принимающие длину фрагмента как один из своих аргументов, обычно имеют имена типа strnxxx(), где символы ххх зависят от конкретной функции.
Преобразования символов в строках
Во многих библиотеках Си имеются две функции для изменения регистра символов внутри строки. Эти функции не определены в стандарте ANSI, но есть в различных компиляторах в том или ином виде. Например в их прототипы содержатся в iфайле string.h для компилятора Microsoft С:
char *strlwr(char *str);
char *strupr(char *str);
Функция strlwr() преобразует все буквенные символы строки str в нижний регистр,
функция strupr() делает прямо противоположное — преобразует все буквы в верхний регистр. Символы, не являющиеся буквами, не подвергаются никакому изменению.
Обе функции возвращают указатель str. Обратите внимание, что эти функции не создают новых строк, а выполняют преобразования в уже существующих.
Другие функции для работы со строками
Рассмотрим несколько функций для различных операций со строками, не подпадающих ни -под одну из рассмотренных ранее категорий. Все они определены заголовочном файле string.h:
strrev()
strset()
strnset()
Функция strrev()
Функция strrev() изменяет порядок следования символов в строке на противоположный.
Она имеет следующий прототип:
char *strrev(char *str);
В результате ее вызова все символы в строке str выстраиваются в порядке, противоположном исходному. Завершающий нулевой символ, конечно, остается там же, где был - в конце строки. Функция возвращает указатель str.
Функции strset() и strnset()
Эти функции, как и предыдущая, не входят в стандартную библиотеку ANSI Си. Функция strset() заменяет все символы (a strnset() — указанное количество символов) на один тот же заданный символ.
Их прототипы имеют вид:
char *strset(char *str, int ch);
char *strnset(char *str, int ch, size_t n);
Функция strset() заменяет все символы в строке str, за исключением завершающего нулевого, на символ ch.
Функция strset() заменяет первые n символов строки.
Если n больше или равно strlen(str), то strnset() заменяет все символы в строке str.
