Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Основні функції обробки символьних типів

 

У ранніх версіях С++ рядки розглядалися як символьні масиви і робота з ними ґрунтувалася на використанні цих масивів. Розроблена бібліотека функцій <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 При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.008 сек.