Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вот еще 2.5.8.11.14.17.20.23.26.29.32..docx
Скачиваний:
2
Добавлен:
25.09.2019
Размер:
30.36 Кб
Скачать

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. При этом существуют и другие кодировки, в которых символ представляется, например, двумя байтами. Для работы с такими строками требуются специальные функции.