Пояснения к работе
В С++ нет специального типа данных. Которые можно использовать для описания символьных строк, последнее хранятся в памяти ЭВМ в виде массивов символов. Так, например, описание
char str[]=”Это строка символов”
определяет массив двадцати элементов типа char, т.е. под эту строку выделяется 20 байт памяти. Если подсчитать, то символов всего 19 (считая и пробелы). Дело в том, что каждая строка автоматически (без вмешательства пользователя) завершается нуль-символом '\0', эквивалентным числу 0.
Обращение к какому –либо элементу этого массива обеспечивает доступ к отдельному символу. Адрес начала строки определяется как обычно для массива, т.е. &str[0] или str.
С другой стороны, из-за того, что строковая константа (строка) в правой части приведенного выражения отождествляется компилятором с адресом её первого символа, правомерной является запись следующего типа:
char *pt=”Это строка символов”.
Здесь описывается указатель pt на переменную символьного типа, и в него заносится адрес начала строки. Теперь доступ к началу второго слова строки «строка» можно осуществить двумя способами: str[4] или *(pt+4).
В стандартной библиотеке С имеется специальные функции для работы со строками. В качестве аргументов таких функций используются указатели, содержащие адреса этих строк! Так, для вывода на экран терминала приведённой строки можно использовать следующие варианты:
puts(pt); printf(“%s”,pt), puts(str).
Функция puts(pt+4) выведет на экран усеченную исходную строку в виде «строка символов».
Можно любую строку вывести и посимвольно. Организовав цикл:
for(i=0;i<=srtlen(str);i++) printf(“%c”,str[i]);
По определению массива, его элементы должны быть однотипными и одного «размера». Предположим, требуется определить массив для представления списка фамилий (например, студентов группы). Если определять его как двумерный массив типа char, то это приведет к нерациональному использованию памяти. Действительно, предположим. Что длина каждой фамилии не превышает 19 символов (букв), и проведем инициализацию массива (при определении массива предельный размер самого левого индекса можно не указывать).
сhar spisok[][20]={“Иванов”,”Петров”,”Сидоров”};
В массиве spisok три элемента, каждый из них длиной 20 байт, т.е. общий объем памяти, занимаемой массивом, составляет 60 байт.
При определении и инициализации теми же символьными строками одномерного массива типа char память распределяется рациональнее:
char *pt[ ]={“Иванов”,”Петров”,”Сидоров”};
Здесь мы определили массив указателей типа char из трех элементов. Для них выделяется 3*sizeof(char *) байтов. Кроме того, компилятор размещает три строковые константы (строки) «Иванов» (7 байт), «Петров» (7 байт), «Сидоров» (8 байт), адреса которых содержаться в указателях pt[0], pt[1], pt[2]. Очевидно, что второй способ сохранения списка фамилий (строк) более экономичный.
ФУНКЦИИ ДЛЯ РАБОТЫ СО СТРОКАМИ
(ФАЙЛЫ – string.h, stdlib.h, stdio.h)
atof(str), atoi(str), atol(l)
– преобразует строку str
в вещественное (типа double),
в целое или длинное целое число
соответственно;
gets(str)
– позволяет вводить
строку str при наличии
в ней пробелов, ввод
заканчивается нажатие
клавиши ENTER;
scanf(str)
– со спецификатором ввода
% позволяет вводить с клавиатуры
строку str до первого пробельного
символа, ввод заканчивается нажатием
клавиши ENTER;
strcat(str,str2)
– присоединяет строку str2 к строке str1,
получившаяся строка автоматически завершается
нулевым байтом. Конечный нулевой байт, первоначально
завершающий строку str1, перезаписывается первым
символом строки str2. Помните, что при выполнении
операции с символьными массивами контроль
нарушения их границ не выполняется, поэтому
программист должен сам позаботится
о достаточно большом размере массива str1,
позволяющем вместить как его исходное
содержимое, так и содержимое массива str2.
В противном случае поведение функции strcat()
не определено;
strchr(str, int c
) – ищет в строке str первое
вхождение сивола c, возращает
указатель на этот символ в строке str,
если символ с в строке не обнаружится, функция
возращает 0 (см. также функцию strrchr(str, int c);
strcmp(str1,str2)
– сравнивает строки str1 и str2 и возвращает
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.