Функции для работы со строками – файл stdlib.h
Для работы со строками используются библиотечные функции, прототипы которых находятся в заголовочных файлах 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 осуществляется побайтово в лексикографическом порядке, то есть в порядке следования соответствующих байтов строк в таблице кодировки. Именно поэтому значения элементов в строках зависят от регистра.
При использовании библиотечных функций следует иметь в виду, что указатель на строку и имя массива символов указывают на адрес размещения строки в памяти. Это означает, что изменения значений элементов строки сохраняются после завершения работы функции. Чтобы не допустить изменений в строке используется указатель на константу, который не позволит модифицировать данные, хранящиеся по адресуемой области памяти.
Пример 1.
//Программа демонстрирует работу функций из файла stdlib. h
#include " stdafx. h"
#include < iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char sv[]=" 23. 547",
si[]=" 1234",
sl[]=" -112424",
st1[15], st2[25], st3[15];
double v;
int i;
long l, t=457821;
v=atof(sv);
printf(" Преобразование строки в вещественное число = %f\n", v);
i=atoi(si);
printf(" Преобразование строки в целое число = %d\n", i);
l=atol(sl);
printf(" Преобразование строки в длинное целое число = %ld\n", l);
printf(" Преобразование длинного целого числа в строку = %s\n",
ultoa(t, st1, 10));
printf(" Преобразование длинного целого числа в строку = %s\n",
ultoa(t, st2, 2));
printf(" Преобразование длинного целого числа в строку = %s\n",
ultoa(t, st3, 16));
system(" pause" );
return 0;
}
|