Строки
Строка – последовательность символов, заканчивающаяся символом ‘\0’.
Всякий раз, когда компилятор встречается с чем-то, заключенным в двойные кавычки, он определяет это как строковую константу. Символы, заключенные в кавычки, плюс завершающий символ ‘\0’, записываются в последовательные ячейки памяти.
Если нужно включить в строку символов символ двойной кавычки, ей должен предшествовать символ обратной косой черты.
Например:
char* s = “Symbol\””;
Инициализация строк
char s1[] = “Hello”;
char s2[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’};
char *s3 = “Hello”;
char s4[100 ] = “Hello”;
Функции для работы со строками
atof
| double atof(char *str);
| Преобразует строку str в вещественное число двойной точности
|
atoi
| int atoi(char * str);
| Преобразует строку str в десятичное целое
|
atol
| long atoll(char *str);
| Преобразует строку str в длинное десятичное целое
|
itoa
| char *itoa(int v, char* str, int baz)
| Преобразует целое v в строку str (2 <=baz<=36). Для отрицательного числа baz=10
|
ltoa
| char ltoa(long v, char* str, int baz);
| Преобразует длинное целое v в строку str
|
strcat
| char *strcat(char *sp, char* si);
| Приписывает строку si к строке sp
|
strchr
| char *strchr(char *str, char c);
| Находит в строке str первое вхождение символа c.
|
strcmp
| int strcmp(char *str1, char*str2);
| Сравнивает строки str1 и str2. Результат отрицателен, если str1<str2, равен нулю, если str1=str2, и положителен, если str1 > str2
|
strcpy
| char *strcpy(char* sp, char* si);
| Копирует строку si в строку sp
|
strcspn
| int strcspn(char *str1, char* str2);
| Определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов str2
|
strlen
| unsigned strlen(char *str);
| Вычисляет длину строки str
|
strlwr
| char *strlwr(char *str);
| Преобразует буквы верхнего регистра в строке в буквы нижнего регистра
|
stnucat
| char *strncat(char *sp, char* si, int kol);
| Приписывает kol символов строки si к строке sp
|
strncmp
| int strncmp(char *str1, char* str2, int kol);
| Сравнивает строки str1 и str2, причем рассматриваются только первые kol символов. Результат отрицателен, если str1<str2, равен нулю, если str1=str2, и положителен, если str1 > str2
|
strncpy
| char *strncpy(char *sp, char *si, int kol);
| Копирует kol символов строки si в строку sp
|
strpbrk
| char *strpbrk(char * str1, char* str2);
| Находит в строке str1 первое появление любого из множества символов, входящих в строку str2
|
strrchr
| char *strrchr(char* str, char c);
| Находит в строке str последнее вхождение символа c
|
strspn
| int strspn(char *str1, char *str2);
| Определяет длину первого сегмента строки str1, содержащего символы из множества символов, входящих в строку str2
|
strupr
| char *strupr(char *str);
| Преобразует буквы нижнего регистра в строке str в буквы верхнего регистра
|
ultoa
| int *ultoa(unsigned long v, char *str, int baz);
| Преобразует беззнаковое длинное целое v в строку str
|
Функции находятся в библиотеках <stdlib.h> и <string.h>
Функции для выделения и освобождения памяти
calloc
| void *calloc(size_t, size_t);
| Возвращает указатель на начало области оперативной памяти для размещения n элементов по m байт каждый. При неудачном завершении возвращает NULL.
|
free
| void free(void *bl);
| Освобождает ранее выделенный блок оперативной памяти с адресом первого байта bl
|
malloc
| void *malloc(size_t s);
| Возвращает указатель на блок памяти длиной s байт. При неудачном завершении возвращается значение NULL
|
realloc
| void * realloc(void *bl, size_t ns);
| Изменяет размер ранее выделенной памяти с адресом начала bl на ns байт
|
Функция calloc аналогична функции malloc, но дополнительно инициализирует выделенную память байтом '\0' (0, NULL).
Функции, перечисленные в таблице, определены в библиотеке <stdlib.h>
Обработка строковой информации
Прежде всего нам нужны переменные для хранения этой информации. Можно воспользоваться простым типом данных Char ("символ") и составным типом String ("строка"). Переменная типа Char в качестве своего значения может иметь один символ. Например, если имеется описание:
Var
C:Char;
то возможны следующие присваивания: C:='a'; C:='1'; C:='?'.
Понятно, что для работы с большими объемами символьной информации этот тип не применим. Поэтому, на практике чаще всего используют тип String. В качестве своего значения переменная этого типа может содержать любую последовательность символов длиной от 0 до 255.
В общем виде переменная строкового типа описывается так:
Рис.1. Общий вид описания строковой переменной
Например, описание:
Var
Line:String[20];
говорит о том, что значением переменной Line может быть любая последовательность символов длиной от 0 до 20.
Замечания.
1. Максимальное число, которое может находиться в квадратных скобках, равно 255. Таким образом, максимальная длина строки 255 символов.
2. При описании переменной строкового типа можно не указывать число в квадратных скобках:
Var
M:String;
Такая запись эквивалентна следующей:
Var
M:String[255];
Доступ к символам строки осуществляется также, как к элементам одномерного массива: указанием имени строковой переменной и в квадратных скобках номера символа в строке. Например, Line[5]. Номер элемента может задаваться выражением, для которого справедливы все требования, налагаемые на индекс элемента массива. Таким образом, строки очень похожи на одномерные массивы, однако, в отличие от массивов, строки допускают присваивание вида: Line:='ель';. При использовании конструкции вида: ReadLn(Line); можно задать значение всей строке.