Для работы со строками используются библиотечные функции, прототипы которых находятся в заголовочных файлах stdlib.h и string.h.
В программах, в зависимости от типа, вызовы функций для работы со строками задаются в виде:
ИмяФ(СписокАргументов);
или
ИмяПерем=ИмяФ(СписокАргументов);
где ИмяФ – имя функции; СписокАргументов – список аргументов, передаваемых в тело функции; ИмяПерем – идентификатор соответствующего типа.
Например:
y=strlen(st);
/*переменной y присвоить значение длины строки st*/
При использовании библиотечных функций следует учитывать некоторые особенности их выполнения и представления символьных данных в памяти.
- Функции, работающие с регистрами, распространяются только на латиницу.
- В С некоторые параметры функций обработки символов принадлежат типу int (unsigned), поэтому, если число станет больше 128 (255), функция будет работать некорректно.
- Перед первым обращением к строке она должна быть объявлена и проинициализирована. Во многих случаях в качестве начального значения строки необходимо бывает задать пустую строку. Такую инициализацию можно выполнить с помощью вызова функции strcpy(s, "");, но более эффективным будет присваивание *s=0;. Кроме того пустую строку можно инициализировать char s[10]=""; или char s[10]="\0";, но при этом размер строки должен быть задан.
- Функции копирования (кроме strncpy) не проверяют длину строки. Размер строки-приемника должен быть больше, чем размер источника на 1 символ (для символа '\0').
При вызове функции strncpy следует помнить, что, если длина копируемой строки превосходит параметр kol, то строка-получатель не будет завершена символом '\0'. В этом случае такой символ надо дописывать в конец строки вручную.
Функции для работы со строками – файл stdlib.h | ||
Функция | Прототип | Краткое описание действий |
atof | double atof (const char *str); | преобразует строку str в вещественное число типа double |
atoi | int atoi (const char *str); | преобразует строку str в целое число типа int |
atol | long atol (const char *str); | преобразует строку str в целое число типа long |
itoa | char *itoa (int v, char *str, int baz); | преобразует целое v в строку str. При изображении числа используется основание baz (2<=baz<=36). Для отрицательного числа и baz =10 первый символ "минус" (–). |
ltoa | char *ltoa (long v, char *str, int baz); | преобразует длинное целое v в строку str. При изображении числа используется основание baz (2<=baz<=36). |
ultoa | char *ultoa (unsigned long v, char *str, int baz); | преобразует беззнаковое длинное целое v в строку str |
Функции для работы со строками – файл string.h | ||
Функция | Прототип | Краткое описание действий |
strcat | char *strcat (char *sp, const char *si); | приписывает строку si к строке sp (конкатенация строк) |
strchr | char *strchr (const char *str, int c); | ищет в строке str первое вхождение символа с |
strcmp | int strcmp (const char *str1, const char *str2); | сравнивает строки str1 и str2. Результат отрицателен, если str1<str2; равен нулю, если str1==str2, и положителен, если str1>str2 (сравнение беззнаковое) |
strcpy | char *strcpy (char *sp, const char *si); | копирует байты строки si в строку sp |
strcspn | int strcspn (const char *str1, const char *str2); | определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2 |
strdup | char *strdup (const char *str); | выделяет память и переносит в нее копию строки str |
strlen | unsigned strlen (const char *str); | вычисляет длину строки str |
strlwr | char *strlwr (char *str); | преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра |
strncat | char *strncat (char *sp, const char *si, int kol); | приписывает kol символов строки si к строке sp (конкатенация) |
strncmp | int strncmp (const char *str1, const char *str2, int kol); | сравнивает части строк str1 и str2, причем рассматриваются первые kol символов. Результат отрицателен, если str1<str2; равен нулю, если str1==str2, и положителен, если str1>str2 |
strncpy | char *strncpy (char *sp, const char *si, int kol); | копирует kol символов строки si в строку sp ("хвост" отбрасывается или дополняется пробелами) |
strnicmp | int strnicmp (char *str1, const char *str2, int kol); | сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров (см. функцию strncmp) |
strnset | char *strnset (char *str, int c, int kol); | заменяет первые kol символов строки str символом c |
strpbrk | char *strpbrk (const char *str1, const char *str2); | ищет в строке str1 первое появление любого из множества символов, входящих в строку str2 |
strrchr | char *strrchr (const char *str, int c); | ищет в строке str последнее вхождение символа с |
strset | char *strset (char *str, int c); | заполняет строку str заданным символом c |
strspn | int strspn (const char *str1, const char *str2); | определяет длину первого сегмента строки str1, содержащего только символы, из множества символов строки str2 |
strstr | char *strstr (const char *str1, const char *str2); | ищет в строке str1 подстроку str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2 |
strtod | double strtod (const char *str, char **endptr); | преобразует символьную константу str в число двойной точности. Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str |
strtok | char *strtok (char *str1, const char *str2); | ищет в строке str1 лексемы, выделенные символами из второй строки |
strtol | long strtol (const char *str, char **endptr, int baz); | преобразует символьную константу str к значению "длинное число" с основанием baz (2<=baz<=36). Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str |
strupr | char *strupr (char *str); | преобразует буквы нижнего регистра в строке str в буквы верхнего регистра |
Сравнение строк с помощью функции strcmp осуществляется побайтово в лексикографическом порядке, то есть в порядке следования соответствующих байтов строк в таблице кодировки. Именно поэтому значения элементов в строках зависят от регистра.
При использовании библиотечных функций следует иметь в виду, что указатель на строку и имя массива символов указывают на адрес размещения строки в памяти. Это означает, что изменения значений элементов строки сохраняются после завершения работы функции. Чтобы не допустить изменений в строке используется указатель на константу, который не позволит модифицировать данные, хранящиеся по адресуемой области памяти.