- •Рядки, дії з рядками
- •Рядки
- •Рядки
- •Рядки
- •Рядки
- •Рядки
- •Рядки
- •Рядки.
- •Рядки
- •Рядки і вказівники
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки. Введення-виведення рядків
- •Строки
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
Рядки. |
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
||||||
Приклади |
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Копіювання фрагмента рядка після початкових пробілів |
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned char sst[80], dst[80]; |
|
|
|
||||||||||
|
i=0; |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||||||
|
while (sst[i] && sst[i] == ' ') // поки в рядку є символ і це пробіл |
|
||||||||||||
|
|
|
|
i++; |
// шукаємо символ, відмінний від пропуску |
|
||||||||
|
|
while (sst[i]) |
// якщо ще не кінець рядка |
|
||||||||||
|
|
|
|
dst[j++] = sst[i++]; // копіюємо символи |
|
|||||||||
|
dst[j] = '\0'; |
// якщо кінець рядка, що копіюється, sst, то завершуємо рядок dst |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||||||||
|
|
|
|
Пропуск пропусків в рядку s, починаючи з позиції start |
|
|
||||||||
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i=start; isspace(s[i]); i++); |
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Видалення пробілів наприкінці рядка |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=strlen(sst)-1; |
|
|
|
|
|
|||
|
|
|
|
|
|
while (sst[i] == ' ' && i >= 0) |
|
|
|
|
|
|||
|
|
|
|
|
|
|
i-- ; |
|
|
|
|
|
||
|
|
|
|
|
|
sst[i+1] = '\0'; |
|
|
|
|
21 |
Рядки. |
|
|
|
Операції з рядками |
|
|
|
Визначення довжини рядка |
|
||
|
Функція size_t strlen (const char *str) |
|
|
|
|
|
повертає кількість символів у рядку str (довжину рядка), не включаючи 0-символ.
const int MAX = 80; char s1[MAX]="abcdef";
typedef unsigned size_t;
cout << strlen(s1) << endl; // 6
|
Функція |
char* strcpy (char *strDest, const char *source) |
Копіювання рядків |
|
|
||
|
|
||||||
|
|
|
|
||||
|
копіює символи рядка source, включаючи завершальний 0-символ, в рядок strDest і |
|
|||||
|
повертає вказівник на її початок. |
|
|
|
|||
|
const int MAX = 80; |
|
|
|
|
||
|
char s1[MAX]="abcdef", s2[MAX]="cd"; |
|
|
|
|||
|
strcpy(s1, s2); |
//cd warning C4996 'strcpy' was declared deprecated |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Функція |
errno_t |
strcpy_s (char *strDest, size_t sizeInBytes_strDest, const char *source) |
|
|||
|
повертає 0 при успішному завершенні і код помилки - в іншому випадку. |
|
|||||
|
const int MAX = 80; |
|
|
|
|
||
|
char s1[MAX]="abcdef", s2[MAX]="cd"; |
|
|
|
|||
|
strcpy_s(s1, MAX, s2); |
//cd |
|
|
|
||
|
|
|
|
|
|
||
|
|
|
|
|
|
||
|
Шаблонна функція (тільки в С++) |
|
|
|
|
||
|
template <size_t size> errno_t |
strcpy_s (char (&strDest)[size], const char *source) |
|
дозволяє викликати функцію в звичному вигляді : strcpy_s (s1,s2); //cd
Стандартні функції роботи з рядками
Рядки. |
|
Операції з рядками |
Копіювання рядків |
Функція char* strncpy (char * strDest, const char * source, size_t count)копіює не більше count символів. Якщо 0-символ зустрівся у вихідній рядку раніше, то копіювання припиняється, а
залишилися до count символи рядка s1 заповнюються 0-символами.
В іншому випадку (якщо count менше або дорівнює довжині рядка s2) Завершальний 0-символ в s1 не додається жодного.
Функція errno_t strncpy_s(char *strDest, size_t sizeInBytes_strDest, const char *source, size_t count)
повертає 0 при успішному завершенні і код помилки - в іншому випадку;
Шаблонна функція(тільки в С++) template <size_t size>
errno_t strncpy_s (char (&strDest)[size], const char *source, size_t count); дозволяє викликати функцію в звичному вигляді:
const int MAX = 80; int count=2;
char s1[MAX]="abcdef", s2[MAX]="cdefghj\0klmn"; strncpy_s(s1,s2,count);
cout << s1 << " " << count << endl; //cd
23
Стандартні функції роботи з рядками
Рядки. |
|
|
|
|
Об'єднання рядків |
|
|
|
|
|
||
|
Операції з рядками |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|||||
|
|
Функція char* strcat (char* strDest, const char* source |
) |
|
|
|
|
|
||||
|
|
додає копію рядка source, включаючи 0-символ, в кінець рядка strDest. Початковий |
|
|||||||||
|
|
символ рядка source записується поверх 0-символа в кінці рядка strDest. Функція |
|
|||||||||
|
|
повертає вказівник на початок результуючого рядка strDest, яка закінчується 0-символом |
|
|||||||||
|
|
і повинна мати розмір не менш strlen (strDest) + strlen (source) + 1 байтів. |
|
|
|
|
|
|||||
|
|
const int MAX = 80; |
|
|
|
|
|
|
|
|
|
|
|
|
char s1[MAX] = "a"; |
|
|
|
|
|
|
|
|
|
|
|
|
char s2[MAX] = "b"; |
|
|
|
|
|
|
|
|
|
|
|
|
cout << strcat(s1,s2) << endl; //ab warning C4996: 'strcat' was declared deprecated |
|
|
|
|
|
|||||
|
|
cout << s1 << endl; |
//ab |
|
|
|
|
|
|
|
|
|
|
|
char* s; |
|
|
|
|
|
|
|
|
|
|
|
|
cout << (s= strcat(s1, s2))<< endl;//abb warning C4996 |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|||||
|
|
Функція errno_t strcat_s (char *strDest, size_t sizeInBytes_strDest, const char *source); |
|
|||||||||
|
|
повертає 0 при успішному завершенні |
|
і код помилки - в іншому випадку. |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|||||
|
|
char buf[16]; |
|
|
|
Шаблонна функція (тільки в С++) |
|
|
|
|
|
|
|
|
|
|
|
template <size_t size> |
|
|
|
|
|
||
|
|
strcpy_s(buf, 16, "Start"); |
|
errno_t strcat_s( char (&strDes)[size], |
const |
|
||||||
|
|
strcat_s(buf, 16, " End"); |
|
char *source ); |
|
|
|
|
|
|||
|
|
cout << buf << endl; //Start |
|
дозволяє викликати функцію в звичному вигляді : |
|
|||||||
|
|
const int MAX = 80; |
|
const int MAX = 80; |
|
|
|
|
|
|||
|
|
char s1[MAX] = "a"; |
|
|
|
|
|
|
||||
|
|
|
char s1[MAX] = "a"; char s2[MAX] = "b"; |
|
||||||||
|
|
char s2[MAX] = "b"; |
|
|
||||||||
|
|
|
strcat_s(s1,s2); |
|
|
|
|
|
||||
|
|
strcat_s(s1, MAX, s2); |
|
|
|
|
|
|
||||
|
|
|
cout << s1 << endl; |
//ab |
|
|||||||
|
|
cout << s1<< endl; //ab |
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
Стандартні функції роботи з рядками
Рядки. |
|
Об'єднання рядків |
|
|
Операції з рядками |
|
|
||
|
|
|
||
|
Функція char* strncat (char* strDest, const char* source, size_t count) |
|
||
|
дозволяє додати не більше ніж count символів рядка source в кінець рядка |
strDest і |
||
|
повертає вказівник на strDest. У рядку strDest має бути не менше strlen(strDest) + |
|||
|
strlen(source) + 1 байтів. |
|
|
|
|
int count =2; |
|
|
|
|
const int MAX = 80; |
|
|
|
|
char s1[MAX] = "aaa"; |
|
|
|
|
char s2[MAX] = "bb"; |
|
|
|
|
strncat(s1,s2,count); |
//warning C4996: 'strncat' was declared deprecated |
||
|
cout << s1 << endl; |
//aaabb |
||
|
char *s_res = strncat(s1,s2,count); |
|||
|
cout << s_res << endl; |
//aaabbbb |
||
|
|
|
|
|
Функція errno_t strncat_s (char *strDest, size_t sizeInBytes_strDest, const char *source, size_t count)
повертає 0 при успішному завершенні і код помилки - в іншому випадку.
|
const int MAX = 80; |
|
|
|
Шаблонна функція (тільки в С++) |
|
|||
|
int count =2; |
template <size_t size> |
|
|
|
char s1[MAX] = "a"; |
errno_t strncat_s (char (&strDest)[size], |
const char |
|
|
char s2[MAX] = "bbb"; |
*source , size_t count); |
|
|
|
дозволяє викликати функцію в звичному вигляді : |
|||
|
strncat_s(s1,MAX,s2,count); |
int count=2; |
|
|
|
cout << s1<< endl; //abb |
const int MAX = 80; |
|
|
|
|
|
char s1[MAX] = "aaa"; |
|
|
Стандартні функції |
|
char s2[MAX] = "bbb"; |
|
|
роботи з рядками |
|
strncat_s(s1,s2, count); |
|
|
|
cout << s1 << endl; |
//aaabb |
|
|
|
|
||
|
|
|
|
|
Рядки. |
Порівняння рядків |
|
|
|
|
|
|||
Операції з рядками |
|
|
||
|
|
|
||
|
|
|
|
|
|
Функція int strcmp (char *s1, const char *s2) |
|
|
|
|
порівнює рядки s1 и s2 в лексикографічному (тобто упорядкованому за |
|
|
|
|
алфавітом) порядку з урахуванням відмінності великих і малих літер |
|
|
|
|
(розглядаються перші символи, якщо вони однакові, то розглядаються |
|
другі |
|
|
||||
|
символи, треті і т.д.). |
|
|
|
Функція повертає 0, якщо рядки рівні; повертає значення <0, якщо перший рядок менше, ніж друга; і повертає значення> 0, якщо перший рядок більше, ніж друга.
cout << strcmp("abc", "ABC")<< endl; // 1 cout << strcmp("ABC", "ABC")<< endl; // 0 cout << strcmp("ABB", "ABC")<< endl; // -1
Функція int strncmp (char *s1, const char *s2, size_t n) проводить порівняння тільки перший n символів двох рядків:функція повертає 0, якщо підрядка рівні; повертає значення <0, якщо перша подстрока менше, ніж друга; та значення> 0, якщо перша подстрока більше, ніж друга.
int count=2;
cout << strncmp("abc", "ABC", count)<< endl; // значення > 0 cout << strncmp("ABC", "abc", count)<< endl; // значення < 0 cout << strncmp("ABB", "ABC", count)<< endl; // 0
Стандартні функції роботи з рядками
Рядки. |
|
|
|
|
|
Порівняння рядків |
|
||
Операції з рядками |
|
|
||
|
|
|
|
|
|
Функція int stricmp (char *s1, const char *s2) |
|
|
|
|
дозволяє порівнювати рядки s1 і s2 без урахування регістру, тобто без |
|
||
|
відмінності між великими та малими буквами. Вона перетворює всі букви |
|||
|
рядків s1 і s2 в малі літери і порівнює потім рядки в лексикографічному |
|||
|
порядку. |
|
|
|
|
cout << stricmp("abc", "ABC")<< endl; // повертає 0 |
|||
|
// warning C4996: 'stricmp' was declared deprecated |
|||
|
cout << stricmp("ABC", "ABC")<< endl; // повертає 0 |
|||
|
|
//warning C4996 |
||
|
cout << stricmp("Ab", "ABC")<< endl; |
// повертає значення < 0 |
||
|
// warning C4996 |
|||
|
cout << stricmp("ABd", "abc")<< endl; // повертає значення > 0 |
|||
|
// warning C4996 |
Функція int _stricmp (const char *s1, const char *s2) працює аналогічно, але вже не видає попереджень :
cout << _stricmp("abc", "ABC")<< endl; // повертає 0 cout << _stricmp("ABC", "ABC")<< endl; // повертає 0
cout << _stricmp("Ab", "ABC")<< endl; // повертає значення < 0 cout << _stricmp("ABd", "abc")<< endl; // повертає значення > 0
27
Стандартні функції роботи з рядками
Рядки. |
|
Операції з рядками |
Порівняння рядків |
Функція int strnicmp (char *s1, const char *s2, size_t n) проводить порівняння тільки перший n символів двох рядків без урахування регістру, тобто без відмінності між великими та малими буквами.
cout << strnicmp("abc", "ABC", 2)<< endl; // повертає 0
// warning C4996: 'strnicmp' was declared deprecated
cout << strnicmp("ABC", "AaC", 2)<< endl; // повертає значення > 0
// warning C4996
cout << strnicmp("Ab", "ABC", 2)<< endl; // повертає 0
// warning C4996
cout << strnicmp("ABd","acc",2)<< endl; // повертає значення < 0
// warning C4996
Функция int _strnicmp (const char *s1, const char *s2, size_t count) работает аналогично, но уже не выдает предупреждений:
cout << _strnicmp("abc", "ABC", 2)<< endl; |
// повертає 0 |
||
cout << _strnicmp("ABC", "AaC", 2)<< endl; |
// повертає значення > 0 |
||
cout << _strnicmp("Ab", "ABC", 2)<< endl; |
// |
повертає |
0 |
cout << _strnicmp("ABd","acc",2)<< endl; |
// |
повертає |
значення < 0 |
Стандартні функції роботи з рядками |
28 |
Рядки. |
Пошук символу в рядку |
|
|
|
|
||||
Операції з рядками |
|
|
|
|
|
|
|
||
|
Функція char * strchr (const char *s, int c) |
|
|
|
|
виконує пошук символа з кодом c в рядку s зліва направо і повертає |
|
|
|
|
вказівник на позицію його першого входження в рядок s. Якщо символа |
|
немає, |
|
|
то повертається вказівник NULL. 0-символ також включається в пошук, |
|
тому |
|
|
||||
|
функція може використовуватися для пошуку в рядку позиції 0-символа. |
|||
|
const int MAX = 80; |
|
|
|
|
char c='\0'; |
|
|
|
|
char s1[MAX]="ab\0cdef"; |
|
|
|
|
char * s= strchr(s1, c); |
//указатель на символ |
||
|
if (s) cout<<" n =" << int(s-s1) << endl; //n=2 - позиция символа |
Функція char * strrchr (const char *s, int c)
выполняет поиск символа с кодом c в строке s справа налево и возвращает указатель на позицию его последнего вхождения в строку s. Если символа нет, то возвращается указатель NULL. 0-символ также включается в поиск, поэтому функция может использоваться для поиска в строке позиции 0-символа.
const int MAX = 80; char c='\0';
char s1[MAX]="ab\0cdef";
char *s= strrchr(s1, c); //указатель на символ if (s) cout<<" n =" << int(s-s1) << endl; //n=2 - позиция символа
Стандартные функции работы со строками
Рядки. |
Перевірка належності символа деякому безлічі (<ctype.h>) |
|
Операції з рядками |
||
|
||
int isdigit (int c) - повертає відмінне від 0 значення, якщо елемент с є цифрою, в іншому |
||
випадку– 0; |
|
|
int isalfa (int c) - повертає відмінне від 0 значення, якщо елемент с є буквою, в іншому |
||
випадку– 0; |
|
|
int isalnum (int c) - повертає відмінне від 0 значення, якщо елемент с є цифрою або |
||
буквою, в іншому випадку– 0; |
||
int isxdigit (int c) - повертає відмінне від 0 значення, якщо елемент с є 16-ічной цифрою, |
||
в іншому випадку– 0; |
||
int islower (int c) - повертає відмінне від 0 значення, якщо елемент с є рядкової буквою |
||
(нижній регістр), в іншому випадку– 0 |
||
int isupper(int c) - повертає відмінне від 0 значення, якщо елемент с є прописною |
||
буквою (верхній регістр), в іншому випадку– 0; |
int isspace (int c) - повертає відмінне від 0 значення, якщо елемент с є роздільником: перехід на новий рядок ('\ n'), пробіл (''), перехід на нову сторінку ('\ f'), горизонтальна
табуляція ('\ t'), вертикальна табуляція ('\ v'), в іншому випадку– 0;
int iscntrl (int c) - повертає відмінне від 0 значення, якщо елемент с є керуючим символом,
в іншому випадку– 0;
int ispunct (int c) - повертає відмінне від 0 значення, якщо елемент с є символом пунктуації, відмінним від пробілу, цифри або букви, в іншому випадку – 0;
int isprint (int c) - повертає відмінне від 0 значення, якщо елемент с є будь-яким
друкованим символом, включаючи пробіл, в іншому випадку – 0;
int isgraph (int c) - повертає відмінне від 0 значення, якщо елемент с є друкованим символом, відмінним від пробілу, в іншому випадку – 0;
Стандартні функції роботи з рядками