Читайте также:
|
|
Объявление строки символов. Имеется несколько способов определения строк. К основным способам относятся использование строковых констант, массивов типа char и массивов, состоящих из символьных строк. Строковая константа заключается в двойные кавычки. Символы, заключенные в кавычки, и завершающий символ ‘\0’ записываются в последовательные ячейки памяти. Компилятор подсчитывает количество символов для определения размера памяти при запоминании (размещении) строки. Строковые константы можно определять при помощи директивы #define. Если в строке нужно использовать символ двойной кавычки, то перед этим символом записывается символ обратной дробной черты. Например:
printf (“\” Сведения о сессии”\n”);
Строковая константа является указателем на место в памяти, где записана строка. При определении массива символьных строк необходимо сообщать компилятору требуемый размер памяти, для установления требуемого размера памяти массив можно инициализировать при помощи строковой константы.(используются статические и внешние массивы)
char c[ ]=”Определение максимального балла”; (внешний массив)
Как и в случае обычных массивов имя c является указателем на первый элемент массива:
c==&c[0]; *c==’0’, и *(c+1)==c[1]==’n’;
Используем указатель для создания строки. Например:
char *c1=”\n ввод баллов”;
Это почти то же самое, что и
static char c1[ ]=”\n ввод баллов”;
Оба описания говорят об одном: с1 является указателем строки. Можно явно задать размер памяти. Во внешнем описании можно записать:
char c[35]=”определение максимального балла”; вместо
char c[ ]=”определение максимального балла”;
Число элементов на один символ больше, чем длина строки (включая нуль-символ). Как и в других статических или внешних массивах, любые использованные элементы автоматически инициализируются нулем (который в символьном виде является нуль-символом, а не символом цифры нуль).
Массивы символьных строк. Рассмотрим массив символьных строк, каждая строка массива представляет собой символьный массив. Приведем описание статического массива в следующем виде:
static char *m[4]={“регистр”,”ячейка”,”указатель”,”элемент”};
Массив *m[4]является массивом, состоящим из 4 указателей на символьные строки. Итак, т.к. символьные строки являются массивами, то имеется в рассмотрении 4 указателя на эти массивы. Первым указателем является m[0], он ссылается на первую строку. Второй указатель m[1] ссылается на вторую строку. При этом каждый указатель, в частности, ссылается на первый символ своей строки:
*m[0]==’р’; *m[1]==’я’; *m[2]==’у’; *m[3]==’э’;
инициализация выполняется по правилам, определенным для массивов. Тексты в кавычках эквивалентны скобочной записи:
{{…},{…},…,{…}};
Описывая размеры строк можно задавать размер строк символов, причем длины строк в данном описании будут одинаковыми:
static char m[4][10];
неиспользованные (лишние) элементы строки статического (внешнего) массива инициализируются символом “\0” (нуль-символом).
Для того, чтобы не было лишних элементов (т.е. экономнее тратится память) можно использовать следующее описание:
static char *[4];
Здесь длина каждой строки определяется конкретной строкой, которая инициализирует соответствующую строку массива.
Библиотека обработки символов. Библиотека обработки символов включает в себя несколько функций, выполняющих ряд полезных проверок и операций с символьными данными. Каждая функция получает в качестве аргумента символ – представляемый типом int – или индикатор EOF (конец файла). Для работы с функциями библиотеки обработки символов надо подключить заголовочный файл <ctype.h>. В таблице 2 приведен перечень функций библиотеки обработки символов.
Таблица 2 – Функции библиотеки обработки символов
Прототип | Описание функции |
int isdijit (int c) | Возвращает значение true, если с является цифрой, и 0 (false) в других случаях. |
int isalpha (int c) | Возвращает значение true, если с является буквой, и 0 в других случаях. |
int isalnum (int c) | Возвращает значение true, если с является цифрой или буквой, и 0 в других случаях. |
int isxdijit (int c) | Возвращает значение true, если с является одним из символов шестнадцатеричного формата, и 0 в других случаях. |
int islower (int c) | Возвращает значение true, если с является буквой нижнего регистра, и 0 в других случаях. |
int isupper (int c) | Возвращает значение true, если с является буквой верхнего регистра, и 0 в других случаях. |
int tolower (int c) | Если с является буквой верхнего регистра, то tolower возвращает с как букву нижнего регистра. В других случаях tolower возвращает аргумент без изменений. |
int toupper (int c) | Если с является буквой нижнего регистра, то toupper возвращает с как букву верхнего регистра. В других случаях toupper возвращает аргумент без изменений. |
int isspace (int c) | Возвращает значение true, если с является пробельным символом – пробел (' '), новая страница (‘\f’), новая строка (‘\n’), возврат каретки (‘\r’), горизонтальная табуляция (‘\t’) или вертикальная табуляция (‘\v’) – и 0 в других случаях. |
int iscntrl (int c) | Возвращает значение true, если с является управляющим символом, и 0 в других случаях. |
int ispunct (int c) | Возвращает значение true, если с является отображаемым при печати символом, но не относится к пробельным символам, цифрам или буквам, и 0 в других случаях. |
int isprint (int c) | Возвращает значение true, если с является отображаемым при печати символом, включая символ пробела (' '), и 0 в других случаях. |
int isgraph (int c) | Возвращает значение true, если с является отображаемым при печати символом, исключая символ пробела (' '), и 0 в других случаях. |
Функции преобразования строк.Для работы с функциями преобразования строк необходимо подключить заголовочный файл <stdlib.h>. Эти функции преобразуют строки цифр в целые значения и значения с плавающей точкой. В таблице 3 приведен перечень функций преобразования строк.
Таблица 3 – Функции преобразования строк
Прототип | Описание функции |
double atof (const char *nPtr) | Преобразует строку nPtr в тип double. |
int atoi (const char *nPtr) | Преобразует строку nPtr в тип int. |
long atol (const char *nPtr) | Преобразует строку nPtr в тип long int. |
double strtod (const char *nPtr, char **endPtr) | Преобразует строку nPtr в тип double. |
long strtol (const char *nPtr, char **endPtr, int base) | Преобразует строку nPtr в тип long. |
unsigned long strtoul (const char *nPtr, char **endPtr, int base) | Преобразует строку nPtr в тип unsigned long. |
Функции стандартной библиотеки ввода/вывода. Стандартная библиотека ввода/вывода <stdio.h> также содержит несколько функций, которые предназначены для работы с символьными и строковыми данными. В таблице 4 приведен перечень функций ввода/вывода символов и строк из стандартной библиотеки ввода/вывода.
Таблица 4 – Символьные и строковые функции стандартной библиотеки ввода/вывода
Прототип | Описание функции |
int getchar (void) | Вводит следующий символ со стандартного устройства ввода и возвращает его в формате целого. |
char *gets (char *s) | Вводит символы со стандартного устройства ввода в массив s до тех пор, пока не встретит символ новой строки или индикатор конца файла. После этого к массиву добавляется ограничивающий символ NULL. |
int putchar (int c) | Печать символа, хранящегося в с. |
int puts (const char *s) | Печать строки s с последующим символом новая строка. |
Прототип | Описание функции |
int sprintf (char *s, const char *format, …) | Эквивалент функции printf за исключением того, что результат вывода запоминается в массиве s, а не отображается на экране. |
int sscanf (char *s, const char *format, …) | Эквивалент функции scanf за исключением того, что ввод осуществляется из массива s, а не с клавиатуры. |
Основная литература: 1осн[325-355], 2осн[371-405]
Дополнительная литература: 10доп[46-51], 11доп[13-16]
Контрольные вопросы:
1. Назовите различные способы определения строки?
2. Какие функции содержит стандартная библиотека ввода/вывода <stdio.h>?
3. Какой заголовочный файл необходимо подключить для работы с библиотекой преобразования строк?
4. Какой заголовочный файл необходимо подключить для работы с библиотекой обработки символов?
5. Какие функции используются для изменения регистров символа?
Дата добавления: 2015-11-04; просмотров: 140 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Тема 8. Использование указателей при обработке одномерных и двумерных массивов. | | | Тема 11. Структуры данных в Си. |