Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_13_Строки у.ppt
Скачиваний:
23
Добавлен:
30.05.2020
Размер:
1.33 Mб
Скачать

Рядки.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приклади

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Копіювання фрагмента рядка після початкових пробілів

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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;

Стандартні функції роботи з рядками

Соседние файлы в предмете Объектно ориентированное программирование