МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
||
Основні функції обробки символьних типів
У ранніх версіях С++ рядки розглядалися як символьні масиви і робота з ними ґрунтувалася на використанні цих масивів. Розроблена бібліотека функцій <string.h> містить могутні засоби для роботи зі строковими масивами. Згодом була розроблена стандартна бібліотека шаблонів Standard Template Library (STL) , що надає ще більш могутні засоби роботи з рядками, об'єднані в клас string. Цей клас включається як заголовний файл , тобто: #include <string>// без літери h
Для обробки символьних типів даних бібліотека функцій <string.h> має велику кількість вбудованих функцій, що збільшують продуктивність праці програмістів і скорочують час на розробку програм. Ця бібліотека містить такі функції, як наприклад:
функції перевірки символів; функції перетворення символів; функції перевірки рядків; функції маніпулювання рядками. Усі ці функції приводяться у вигляді списків, згрупованих по їх розташуванню в заголовних файлах. Найчастіше приводяться прототипи функцій, що описують, яким образом використовувати функції в програмах. Розглянемо прототипи, короткий опис дій і методику використання функцій, які частіше використовуються:
¾ Копіювання рядків char strcpy (s, *st); ¾ копіює байти рядка st у рядок s, (включаючи "\0"; повертає s),наприклад:
char str [50]; strcpy (str, "Сьогодні гарна погода "); char *strdup (const char *str); ¾ копіює рядок strі повертає покажчикна рядок – копію, наприклад:
char *st1 = " Прийшла весна"; char *st2; st2= strdup (st1); // Копіюється st1 у st2 char * strnсpy (char *st1,const char *st2, int n); ¾ копіює n символів з рядка st2у st1,рядок st1 повинний бути більше чи дорівнювати st2, інакше виникне помилка, наприклад:
char st1[]= "Паскаль "; char st2[] = "Привіт з далека "; strnсpy (st1,st2,3);// Тепер у st1¾ "Прикаль"
¾ Конкатенація слів char *strcat (char *st1, const char *st2); ¾ поєднує st1і st2і повертає st1,наприклад: char string [100]; strcpy (string, "Borland "); strcat (string, " C++5"); , получаємо рядок string = "Borland C++ 5" ;
char *strncat (char *st1, const char * st2, int n);¾ додає до рядка st1 n символів рядка st2і повертає в st1, наприклад : сhаr st1 [90] = "Привіт " ; char st2 [50] = " Сашко і Маша"; strncat (st1, st2, 5); st1 ="Привіт Сашко ". ¾ Порівняння рядків int strcmp ( char *st1, char *st2); - порівнює рядки st1 і st2і повертає цілу величину, рівну: < 0 ¾ якщо st1 < st2; = 0 ¾ якщо st1 = st2; > 0 ¾ якщо st1 > st2; , наприклад: char st1[] = "Слово " ; char st2 [] = "слово"; int k; k = strcmp (st1, st2); // k < 0; int stricmp (const char *st1, const char *st2); ¾ виконує порівняння рядків не зважаючи на регістр символів; повертає цілу величину як і в попередньому випадку (див. функцію strcmp()), наприклад: char st1[] = "Слово " ; char st2 [] = "слово"; int k; k = stricmp (st1, st2); k=0; int strncmp (char *st1, char *st2, int n); ¾ виконує порівняння рядків c заданою кількістю символів n у st1 і st2 і повертає цілу величину: < 0¾ якщо st1 < st2; = 0 ¾ якщо st1 = st2; > 0 ¾ якщо st1 > st2;
char *strnicmp (char *st1, char *st2, int n); ¾ виконує порівняння рядків c заданою кількістю символів n у st1і st2, не зважаючи на регістр і повертає цілу величину як і в попередньому випадку.
¾ Перетворення символів рядка char *strlwr (char *st);¾ перетворить символи рядка st верхнього регістра в символи нижнього регістра, інші символи не зачіпаються, Наприклад: char st [i] =" Привіт Маша'; strlwr (st); // тепер st = "привіт маша". char *strupr (char *st); ¾ перетворить символи рядка st нижнього регістра в символи верхнього регістра, інші символи не зачіпаються; char *strrev (char *st); ¾ записує символи в рядку st у зворотному порядку (реверсує рядок), наприклад: char st [] =" Hello"; strrev (st); //теперst = "olleН ".
char *strchr (char *st , int c); ¾ визначає перше входження символу c у рядок st; повертає покажчик на символ у рядку st, що відповідає введеному зразку, наприклад: сhаr st [90] = " Borland C++ 5 " char *spt; spt = strchr (st , '+'); // Тепер покажчик spt указує на підрядок "++5" рядка st. char *strrchr (char *st, int c); ¾ знаходить останнє входження символу cу рядок st;якщо символ cу рядку не виявлений ¾ повертає 0, інакше повертає покажчик на останній символ у рядку st, що відповідає заданому зразку, наприклад: char st [80] = "Borland C++5"; char *spt; spt = strrchr (st , '+'); // Тепер покажчик spt указує на підрядок "+5" рядка st.
¾ Пошук підрядка в рядку
strspn (const char *st1, const char *st2 );¾ повертає кількість символів від початку рядка st1, що збігаються із символами рядка st2, де б вони не знаходилися в st2, наприклад:
char st1 [] = "Borland C++5"; char st2 [] = " narlBod "; int k; k = strspn (st1, st2); // k=8 У цьому випадку зміннаkодержує значеннярівне8,тому що перші 8 символів рядка містилися в st1 (включаючи символ проміжок). char *strstr (const char *st1,const char *st2); ¾ функція шукає в рядку st1 перше входження st2і повертає покажчик на перший символ, знайдений у st1 з підрядка st2; якщо рядок st2 не виявлена в st1 - функція повертає 0, наприклад: char st1 [] = "Привіт друг, йдемо в кіно " ; char st2 [] = "друг '; char*spt; spt = strstr (st1, st2); Результат виконання: spt = " друг, йдемо в кіно". У разі потреби визначення останнього входження, треба спочатку реверсувати рядок за допомогою функції strrev. char *strtok ( char *st, const char *dlm); - розбивка рядка на лексеми ( сегменти ), обмежені символами включеними до складу параметра dlm. Цей параметр може містити будь-яку кількість різних обмежників ¾ ознак границь лексем; після виділення лексеми в рядок stміститься символ '\0'. Наступні виклики функції strtok() повинні бути. с першим аргументом NULL.Вони будуть повертати покажчик на інші , наявні в stлексеми. Щораз після завершення виділення лексем у її кінці замість розділового символу міститься символ '\0'. Після того, як у рядку не залишиться ні однієї лексеми, функція повертає NULL . Для збереження вихідного рядка її треба записати в резервну змінну. Цю функцію зручно використовувати для розбивки речення на слова або будь-які інші сегменти. Розглянемо приклад програми з використанням strtok(): Приклад 3.4 Увести речення, розбити його на слова з виведенням порядкового номера слова і підрахунком символів у кожнім слові: //P3_4.CPP ¾ застосування функції strtok( ). // визначення порядкового номера слова в реченні і // підрахунок символів у кожнім слові #include <string.h> #include < iostream> using namespace std; Переглядів: 900 |
Не знайшли потрібну інформацію? Скористайтесь пошуком google: |
© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове. |
|