Другие примеры постоянных строкового типа: “ Первая строка\nВторая строка ”, L“Hello, \004dартин” (“Hello, Мартин”).
В языке С нет специального типа данных для строковых переменных. Строка символов определяется языком С++ как массив символов с завершающим невидимым символом-терминатором ' \0 ' (см. рисунок 1). Поэтому, под размещаемую в памяти строку необходимо отводить на 1 байт больше количества символов в строке.
Примеры объявлений массивов:
1. char Prompt [6] = {'R', 'e', 'p', 'l', 'a', 'y'}; // массив из шести символов
2. char Prompt [ ] = "Replay"; // массив из шести символов длиной 7 байтов
Обратиться к символу - элементу массива можно, указав имя массива и индекс символа в строке.
В языке С++ для работы со строковыми функциями (таблица 3.4) используюется заголовочные файлы <string.h> и <stdlib.h>; в них, например, определен тип size_t - тип результата, который получается после применения оператора sizeof и представляет собой разновидность целого без знака.
Таблица 3.4 - Функции для работы со строками
Прототип функции | Краткое описание функции |
char * strcat (char *sp, char *si) | дописывает строку si к строке sp (конкатенация строк) |
char *strchr (char *str, int c) | ищет в строке str первое вхождение символа с |
int strcmp (char *str1, char *str2) | сравнивает строки str1 и str2; результат отрицателен, если strl меньше str2, равен нулю, если str1 равно str2 и положителен, если str1 больше str2 (сравнение беззнаковое) |
char *strcpy (char *sp, char *si) | копирует байты строки si в строку sp |
int strcspn (char *str1, char *str2) | определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2 |
char *strdup (const char *str) | выделяет память и переносит в нее копию строки str |
unsigned strlen (char *str) | вычисляет длину строки str |
char *strlwr(char *str) | преобразовывает буквы верхнего регистра в строке в соответствующие буквы нижнего регистра |
char *strncat (char *sp, char *si, int kol) | дописывает kol символов строки si к строке sp |
int strncmp (char *str1, char *str2, int kol); | сравнивает части строк str1 и str2, причем рассматриваются первые kol символов. Результат отрицателен, если str1 меньше str2; равен нулю, если str1 равен str2, и положителен, если str1 больше str2 |
char *strncpy (char *sp, char *si, int kol) | копирует kol символов строки si в строку sp («хвост» отбрасывается или дополняется пробелами) |
char *strnicmp (char *str1, char *str2, int kol) | сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров |
char *strnset (char *str, int с, int kol) | заменяет первые kol символов строки str символом с |
char *strpbrk (char *str1, char *str2) | ищет в строке str1 первое появление любого из множества символов, входящих в строку str2 |
char *strrchr (char *str, int с) | ищет в строке str последнее вхождение символа с |
int strset(char *str, int с) | заполняет строку str символом с |
int strspn (char *str1, char *str2) | определяет длину первого сегмента строки str1, содержащего только символы, из множества символов строки str2 |
char *strstr(const char *str1, const char *str2) | ищет в строке str1 подстроки str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2 |
double *strtod (const char *str, char **endptr) | преобразует символьную строку str в число двойной точности; если endpt нe равен null, то *endptr возвращает как указатель на символ, при достижении которого прекращено чтение строки str |
char *strtok (char *str1, const char *str2) | ищет в строке str1 лексемы, выделенные символами из второй строки |
long *strtol (const char *str, char **endptr,intbaz) | преобразует символьную строку str к значению «длинное число» с основанием baz(от 2 до 36). Если endptr не равен null, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str |
char *strupr (char *str) | преобразует буквы нижнего регистра в строке в соответствующие буквы верхнего регистра |