
- •Федеральное агентство по образованию
- •Краткая история языка с
- •Особенности и основные понятия языка Си
- •Структура программы
- •Типы данных
- •Классификация типов данных
- •Вещественные
- •Логический
- •Диапазоны представления данных
- •Объявление переменных
- •Константы в языке Си
- •Операции языка Си. Приоритет операций
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные операции
- •Операцияsizeof
- •Операция выбора по условию
- •Операция запятая
- •Приведение типов Неявное преобразование типов
- •Явное преобразование типов
- •Основные средства ввода-вывода на Си Понятие потока
- •Стандартные потоки
- •Функции потокового ввода-вывода
- •Функции ввода
- •Ввод символов
- •Ввод строк
- •Форматированный ввод
- •Операторы языка Си
- •Оператор if
- •Оператор switch
- •Оператор while
- •Оператор do while
- •Оператор for
- •Оператор break
- •Оператор continue
- •Функции вывода на экран
- •Вывод символов
- •Функция вывода строк puts()
- •Форматированный вывод
- •Указатели в языке Си
- •Адресная арифметика
- •Массивы
- •Функции в языке с
- •Прототипы функций
- •Указатели типа void
- •Функции, возвращающие указатели
- •Встраиваемые функции
- •Рекурсивные функции
- •Функции с переменным числом аргументов
- •Аргументы функции main()
- •Область действия и область видимости
- •Локальные переменные
- •Локальные переменные в функции Main()
- •Глобальные переменные
- •Классы памяти
- •Указатели на указатели
- •Указатели и многомерные массивы
- •Массивы указателей
- •Указатели на функции
- •Операции над строками символов Определение длины строки
- •Копирование строк
- •Поиск в строках
- •Преобразования символов в строках
- •Другие функции для работы со строками
- •Преобразования строк в числа
- •Преобразования чисел в строки
- •Функции анализа символов
- •Распределение памяти
- •Манипулирование блоками памяти
- •Типы, определяемые пользователем
- •Перечислимый тип
- •Структуры
- •Сложные структуры
- •Битовые поля в структурах
- •Объединения
- •Работа с файлами Связь между потоками и файлами
- •Типы дисковых файлов
- •Открытие файла
- •Запись и чтение данных
- •Форматированный ввод-вывод Форматированный вывод
- •Int fprintf (file *fp, char *fmt, ...);
- •Форматированный ввод
- •Символьный ввод
- •Символьный вывод
- •Блочный ввод-вывод
- •Закрытие файла
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •69 Лекции по курсу «Языки программирования» Часть III
Операции над строками символов Определение длины строки
Прототип функции:
#include <string.h:>
size_t strlen(char *str);
Тип size_t идентичен типу unsigned.
str – указатель на строку, длину которой необходимо определить.
Функция возвращает количество символов от начала str и до первого нулевого символа, не включая его.
Копирование строк
При копировании строк требуется копирование исходной строки из занимаемого ею участка памяти в другой участок, где находится строка-копия.
Функция strcpy()
Прототип функции:
#include <string.h>
char *strcpy( char *dst, const char *src);
По определению, функция strcpy() выполняет копирование строки, находящейся по адресу src (источник) вместе с ее завершающим нулевым символом \0, в участок памяти, начинающийся по адресу в указателе dst (приемник).
Функция возвращает указатель на новую строку, dst.
До вызова функции strcpy() необходимо выделить память для новой строки. Сама функция не проверяет, достаточно ли памяти имеется по указанному ей адресу. Если распределение памяти не выполнялось, то функция затрет strlen(src) байт новой информацией, начиная с адреса, указанного в dst.
Функция strncpy()
Эта функция в отличие от strcpy() копирует определенное количество символов.
Прототип функции:
#include <string.h>
char *strncpy( char *dst, const char *src, size_t n);
Функция копирует не более n символов из srс в dst.
Если строка src короче, чем число символов, то к ней добавляется достаточное количество нулевых символов, чтобы вся dst копировалось ровно n символов.
Если строка src длиннее, чем n символов, то к dst не добавляется завершающий нулевой символ.
Функция возвращает указатель на dst.
Функция strdup()
По назначению она аналогична strcpy(), однако сама выполняет распределение памяти для буфера, в который копируется строка, с помощью вызова функции malloc(). Эта функция не определена в стандарте ANSI. Она входит в библиотеки многих компиляторов, таких как Microsoft, Borland и Symantec Си, но другие компиляторы могут ее и не поддерживать (или поддерживать в другом виде).
Прототип функции:
char *strdup( char *src);
Аргумент src представляет собой указатель на копируемую строку. Функция возвращает указатель на строку, в которую было выполнено копирование — т.е. на буфер, созданный с помощью malloc() — или NULL, если выделить память оказалось невозможным.
Сравнение двух целых строк - strcmp()
Функция strcmp() предназначена для посимвольного сравнения двух строк.
Прототип функции:
int strcmp(const char *str1, const char *str2);
Аргументы str1 и str2 указывают на сравниваемые строки.
Значения, возвращаемые функцией strcmp()
Возвращаемое значение |
Смысл |
Отрицательное |
strl меньше str2 |
0 |
strl равна str2 |
Положительное |
strl больше str2 |
Сравнение фрагментов строк – strncmp()
Библиотечная функция strncmp() сравнивает фрагмент заданной длины из одной строки с другой строкой. Она имеет следующий прототип:
int strncmp(const char *str1, const char *str2, size_t n);
Эта функция сравнивает n символов из строки str2 со строкой str1. Сравнение выполняется до тех пор, пока не исчерпаются все n символов или не будет достигнут конец str1. Способ сравнения и возвращаемые значения — те же, что и у функции strcmp(). Строки сравниваются с учетом регистра.
В стандартной библиотеке ANSI Си нет функций для сравнения строк без различия регистра символов. Однако многие распространенные компиляторы Си имеют нестандартные функции для этой цели. В библиотеке Borland имеется функция strcmpi(). Читайте документацию.