- •Функции.
- •Вызов функции с переменным числом параметров
- •Функция main и её параметры.
- •Директивы препроцессора (прекомпилера).
- •Объявление указателей.
- •Модификатор const.
- •Операции.
- •Указатели на различные типы.
- •Указатель на void.
- •Применение указателей для передачи данных между функциями.
- •Массивы.
- •Индексация массивов.
- •Хранение массива в памяти. Адреса элементов. Хранение массива в памяти.
- •Массивы и константные указатели.
- •Статическое и динамическое выделение памяти.
- •Функции calloc, malloc, free
- •Функция realloc
- •Передача массивов в качестве аргументов функции.
- •Указатели на функции.
- •Библиотеки функций.
- •Функции форматированного ввода-вывода.
- •Функция printf().
- •%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип
- •Для чего нужен форматированный вывод.
- •Функция scanf().
- •Функции sprintf() и sscanf().
- •Функции fprintf() и fscanf().
- •Функции неформатированного ввода-вывода.
- •Работа со строковыми данными (стрингами). Представление строковых данных в языке c.
- •Функции работы со строками.
- •Потоковый ввод-вывод
- •Функции форматированного ввода-вывода.
- •Функция printf().
- •%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип
- •Для чего нужен форматированный вывод.
- •Функция scanf().
- •Функции sprintf() и sscanf().
- •Функции fprintf() и fscanf().
- •Функции неформатированного ввода-вывода.
- •Функции работы с файлами.
- •Потоковый ввод-вывод
- •Работа с потоками
- •Курсор.
- •Ввод-вывод отдельных символов и строк.
- •Форматированный ввод-вывод информации в файл.
- •Блочный потоковый ввод-вывод
- •Смена текущей позиции в файле. Проверка конца файла.
- •Функции доступа к файлам нижнего уровня.
- •Методы сортировки данных.
- •Введение
- •Сравнение методов сортировки
- •Программная реализация алгоритмов сортировки
- •Метод пузырька.
- •Метод обмена.
- •Метод вставки.
- •Метод Шелла.
- •Метод кучи (бинарной кучи).
- •Очередь
- •Линейный список
- •Физическое (машинное) представление линейных списков
- •Программные реализации структур данных. Стек. Реализация в виде массива.
- •Стек. Связанное представление.
- •Очереди. Реализация в виде массива.
- •Дерево. Связанное представление.
- •Рекурсивный вызов функций.
- •Структуры. Объединения. Перечисления.
- •Перечисление (enum).
- •Производные типы данных.
- •Структура (struct).
- •Побитовое описание полей структуры.
- •Объявление переменных, реализующих структуру.
- •Доступ к элементам структуры.
- •Объединение (union).
- •Вложенное описание структур и объединений.
- •Описание структур и объединений в виде пользовательского типа.
- •Передача структур и объединений в виде параметров функции.
- •Инициализация структур и объединений.
- •Выгода от использования структур
Функции работы со строками.
Работу со строками в C можно проводить пользуясь обычными приёмами работы с массивами или же функциями работы с памятью.
Так, например, операция индексации, применённая к массиву символов, вернёт один символ хранящейся в нём строки:
char str[]="TempString";
c=str[2];
Можно также применять функции сравнения и копирования памяти, описанные в файле memory.h, например memcmp(), memcpy и другие. Но для более удобной работы со стрингами в C существует набор функций string.h, в которой содержатся функции работы со строковыми данными. В большинстве случаев они очень похожи на функции работы с памятью, но у них есть одно существенное отличие – функции работы со стрингами автоматически находят терминирующий ноль и вычисляют длину стринга, тем самым освобождая программиста от необходимости постоянно указывать точную длину строки.
Основные функции для работы со строковыми данными (наиболее часто используемые выделены курсивом):
Форматирование строк.
int sprintf ( char *buffer, const char *format [, argument] ... );
Запись форматированных данных в массив символов.
Работа функции полностью аналогична работе функции printf, но, в отличие от последней, форматированная строка не выводится на экран, а записывается в область памяти, на которую указывает указатель buffer. Это может быть динамически выделенная память, или массив символов (статически выделелнная память). Размер выделенной памяти должен быть достаточным, для размещения в нём полученной форматированной строки.
Переменная format задаёт формат размещения данных, а список необязательных параметров [argument] задаёт значения данных, которые должны быть отформатированы.
int sscanf( const char *buffer, const char *format [, argument ] ... );
Чтение данных по заданному формату из строки.
Работа функции полностью аналогична работе функции scanf, но, в отличие от последней, исходные данные не вводятся с клавиатуры, а считываются из области памяти, на которую указывает указатель buffer.
Переменная format задаёт формат разбора данных, а список необязательных параметров [argument] содержит указатели на переменные, в которые должны быть считаны значения по заданному формату.
Более подробно работа функций форматированного ввода-вывода будет рассмотрена позднее.
strftime Создание форматированной строки с датой и временем.
Сравнение строк.
int strcmp( const char *string1, const char *string2 );
Сравнение 2 строк. Функция возвращает:
-1, если string1<string2;
1, если string1>string2;
0, если string1=string2;
Сравнение производится последовательным сравнением символов, стоящих в данных строках в одинаковых позициях.
Если все символы равны и строки имеют одинаковую длину, то строки считаются равными.
Если строки имеют разную длину, но короткая строка является началом длинной (например, "ABC" и "ABCDE"), то короткая строка считается меньше длинной.
Если в ходе сравнения встретились различные символы, то та строка, в которой содержится символ с меньшим кодом, считается меньшей (например, "ABC"<"ABD", "ABCDEF"<"AH")
int stricmp( const char *string1, const char *string2 );
Сравнение 2 строк без учёта регистра символов.
int strncmp( const char *string1, const char *string2, size_t count );
Сравнение n первых символов 2 строк.
int strnicmp( const char *string1, const char *string2, size_t count );
Сравнение n первых символов 2 строк без учёта регистра символов.
Объединение строк.
char *strcat( char *strDestination, const char *strSource );
Объединение 2 строк. Формируется строка, составленная из содержимого области памяти, на которую указывает strDestination, и добавленного к ней в конце содержимого области памяти, на которую указывает strDestination. Содержимое полученной строки записывается в strDestination. Размер выделенной памяти, на которую указывает strDestination, должен быть достаточно большим для того, чтобы в нём поместилась сформированная строка. Обеспечение этого условия возлагается на программиста.
Функция возвращает strDestination.
strncat Объединение n первых символов 2 строк.
Копирование строк и символов.
char *strcpy( char *strDestination, const char *strSource );
Копирование одну строку в другую (содержимое одного массива символов в другой). Функция копирует строку, содержащуюся в strSource в область памяти, на которую указывает strDestination. Размер выделенной памяти, на которую указывает strDestination, должен быть достаточно большим для того, чтобы в нём поместилась строка, хранящаяся в strSource. Обеспечение этого условия возлагается на программиста.
strncpy Копирование строки, состоящей из n первых символов исходной строки в результирующий символьный массив.
Определение длины строки.
size_t strlen( const char *string );
Вычисление длины строки (в символах).
Функция возвращает длину строки в символах, не включая в их число терминирующий ноль (например, strlen("ABC") будет равно 3).
Смена регистра символов.
strlwr Смена регистра всех символов строки на нижний (строчные буквы).
strupr Смена регистра всех символов строки на верхний (заглавные буквы).
Запись символов.
strset Заполнение строки символом с заданным кодом (все символы данной строки будут заменены на заданный символ).
strnset Заполнение n первых символов строки символом с заданным кодом
Реверсирование стринга.
strrev Реверсирование строки (запись задом наперёд).
Функции поиска.
char *strstr( const char *string, const char *strCharSet );
Поиск первого вхождения искомой строки strCharSet в заданной строке string.
Если строка strCharSet содержится в строке string, то функция возращает указатель на её первое вхождение в строку string (указатель на ячейку памяти с первым символом этой подстроки).
Если strCharSet не содержится в string, то функция возвращает NULL.
Если strCharSet является пустой строкой, то функция возвращает string;
strspn Поиск первого вхождения любой подстроки искомой строки в заданной строке.
strcspn Поиск в данной строке первого символа, содержащегося в искомой строке (возвращает индекс символа).
strspnp Поиск в данной строке первого символа, не содержащегося в искомой строке.
strchr Поиск в данной строке первого вхождения искомого символа.
strpbrk Поиск в данной строке первого символа, содержащийся в искомой строке (возвращает указатель на ячейку памяти, хранящую этот символ).
strrchr Поиск в данной строке последнего вхождения искомого символа.
char *strtok( char *strToken, const char *strDelimit );
Функция разбиения строки на элементы. Использует в качестве разделителя символы, заданные в анборе strDelimit.
Если strToken!=NULL, то функция начинает процесс разбиения и возвращает указатель на первый элемент.
Если strToken==NULL, то функция возвращает указатель на очередной элемент, или же NULL, если все элементы уже были перебраны.
Для большинства функций в string.h существуют похожие функции, ортличающиеся наличием символа 'n' в имени функции (например, strcmp и strncmp). Обычно они выполняют одну и ту же функцию. Отличие между ними заключается в том, что функция без 'n' оперирует со всей строкой, т.е. с набором символов от начала строки до терминирующего нуля.
Функция, содержащая 'n' имеет дополнительный параметр – количество символов count от начала строки, с которыми будут проводиться операции. Если заданное количество символов меньше длины строки, то из заданного стринга будет сформирован новый, содержащий только count первых символов, а потом уже к нему будет применена заданная операция. Если же count больше или равно длине строки, то работы будет проводиться со всей строкой целиком.
Библиотека функций языка С. Функции ввода-вывода.