- •2.Целые,вещественные типы данных.Операции над ними.Диапозоны значений.Совместимость указанных типов.
- •2. *, / , Div, mod, and, shl, shr(сдвиг);
- •5.Ввод вывод данных.Стандартные потоки,файловые потоки.
- •8.Примеры функций обработки одномерных массивов.Работа в динамической памяти.
- •11.Правила оформления функции в с.Правила локализации переменных.Область действия и область видимости переменных.Примеры с разным типом возвращаемого значения.
- •14.Работа со строками.Форматы представления строк.Функции для работы со строками и примеры.
- •17.Бинарные и типизированные фаилы.Общие черты и отличия.Представления данных в них.
- •20.Пользовательские типы данных.Структуры.Массивы структур/записей.
- •23.Перегрузка операций для структур:определение правил для операторов согласно разработанным пользовательским типам.
- •26.Рекурсивные алгоритмы.Проверка строки на симметричность.Вычисление суммы ряда.
- •29.Графические библиотеки.Основные функции и процедуры.
14.Работа со строками.Форматы представления строк.Функции для работы со строками и примеры.
Функции работы со строками c
Давайте вначале посмотрим, что нам может дать наша библиотека stdio.h, которая содержит парочку функций работы со строками:
int getchar()
возвращает значение символа, введенного вами с клавиатуры. А вот и вывод этого числа:
printf("%d", getchar());
char *gets (char *s)
функция просит вводить пользователя строку, которую она помещает в массив s, пока пользователь не нажмет 'Enter':
char str[7] = "";
gets(str) ;
int putchar (int c)
печатает символ, который имеет код 'c':
putchar(97);//напечатает символ а
int puts (char *s)
печатает строку s и переводит курсор на новую строку:
char str[7] = "sergey";
puts(str);
int sprintf (char *s, char *format, ...)
Выполняет тоже, что и функция printf, за тем исключением, что записывает данные в массив s:
char str[37] = "";
sprintf (str,"chislo:%d, month: %s",10,"desember");
//В массиве будет: chislo:10, month: desember
int sscanf (char *s, char *format, ...)
происходит ввод значений не с клавиатуры, а из массива s:
char str[37] = "sergey", s[100]="";
sscanf (str,"%s", s);
string.h
Теперь давайте рассмотрим очень мощную библиотеку для работы со строками c: string.h. Естественно, что для работы функций библиотеки string.h ее надо подключить к нашей программе.
Вот перечень функций:
char *strcpy (char *srt1, char str2)
Копирует строку str2 в строку str1, возвращаемым значением этой функции является новая, полученная строка str1
char str[37] = "sergey", s[100]="monk";
strcpy(str,s);
char *strncpy (char *srt1, char str2, int n)
эта функция делает все тоже самое, что и предвидущая, за исключением того, что тут возможен контроль количества копируемых символов:
char str[37] = "sergey", s[100]="monk";
strncpy(str,s,3);//ответ: mongey
char *strcat (char *srt1, char str2)
Функция добавляет в строку str1 строку str2. Т.е. на место нуль-терминатора в строке str1, вставляется строка str2:
char str[37] = "sergey", s[100]="monk";
strcat(str,s); //Ответ: sergeymonk
char *strncat (char *srt1, char str2, int n)
Добавляет к первой строке ровно n символов из второй строки
char str[37] = "sergey", s[100]="monk";
strncat(str,s,2);//ответ: sergeymo
Вот вы и посмотрели функции работы со строками c и библиотечный файл string.h. С ними все намного упрощается. Но прежде чем вы будете их использовать, надо выполнить домашнее задание.
Формат представления.В С отсутствуют встроенные строковые типы в том смысле, в котором они есть в языках типа Basic и Pascal. И присущая этим языкам легкость оперирования строковыми переменными (присвоение, сравнение) в С недоступна. Что же такое строка в С?
Для начала разберемся, что такое строка в жизни. Очевидно, что строка – это последовательность символов. В С – как в жизни. С-строка — это последовательность символов. Как известно, последовательности в С представляются массивами или указателями. Между первыми и вторыми существует связь, однако природа этой связи выходит за рамки данной статьи. Предполагается, что читателю знакомы следующие особенности связи между массивами и указателями:
массив можно привести к указателю на его первый элемент, что неявно происходит при передаче массивов в функции, ожидающие указатели
информация о размере массива переданного таким образом в функцию теряется
в С не существует способа передать массив по значению с сохранением его размера указателя на первый элемент массива достаточно для работы со всем массивом, при условии что нам известна его длина.
В дальнейшем для простоты я по большей части буду говорить о массивах, но почти все сказанное относится и к указателям.
Итак, тип строк в С – массив. Однако каков тип элементов этого массива? Вообще говоря, возможны варианты. Исторически символ занимает 1 байт, в этом случае он имеет тип char. При этом существуют и другие кодировки, в которых символ представляется, например, двумя байтами. Для работы с такими строками требуются специальные функции.