Функції роботи з рядками й символами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функції роботи з рядками й символами



Рядок являє собою масив символів, що закінчується нуль-символом. В C++ є дві можливості роботи з рядками: функції, успадковані з бібліотеки С (заголовний файл <string.h> або <cstring>), і бібліотечний клас C++ string, що надає більше широкі можливості подання, обробки й контролю рядків (він розглядається в розділі «Рядка».

Бібліотека С містить функції копіювання рядків (strcpy. strncpy), порівняння (strcmp, strncmp), об'єднання рядків (strcat. strncat), пошуку підрядка (strstr), пошуку входження символу (strchr, strrchr, strpbrk), визначення довжини рядка (strlen) і інших. Повний список функцій наведений у додатку 6.

У заголовних файлах <stdlib.h> й <cstdlib> утримуються корисні функції перетворення рядків у числа (зворотні перетворення можна зробити за допомогою функції sprintf): double atof(const char* p) перетворить переданий рядок в double; int atoi (const char* p)   перетворить переданий рядок в int; long atol (const char* p)  перетворить переданий рядок в long.

Пробіли й табуляції на початку рядка пропускаються. Перетворення припиняється при зустрічі неприпустимого символу або кінця рядка. Якщо рядок не можна перетворити в число, повертається 0. Якщо число виходить за межі діапазону даного типу, змінної errno (заголовний файл <cerrno>) привласнюється значення ERANGE і повертається припустиме число.

Приклад (програма заповнює масив типу double з рядка):

 

#include <stdio.h> #include <string.h>

#include <stdlib.h>

int main(){

char s[] = "2.38.5.70. 0.0. 1". *p = s:

double m[10]:

int i = 0:

do{

m[i++] = atof(p);

if (i>9)break;

}while(p = strchr(p, ','), p++);

for(int k = 0; k<; k++) printf("%5.2f ". m[k]);

return 0:

}

Для роботи із символами в стандартній бібліотеці (заголовні файли <ctype. h> й <cctype>) є наступні функції:

 

Ім'я перевірка на приналежність символу безлічі
isalnum букв і цифр (A-Z, a-z, 0-9)
isalfa букв (A-Z, a-z)
iscntrl керуючих символів (з кодами 0..31 й 127)
isdigit цифр (0-9)
isgraph  символів, що друкують, крім пробілу (isalfa| isdigit| ispunct)
islower букв нижнього регістра (a-z)
isprint символів, що друкують
ispunct знаків пунктуації
isspace символів-роздільників
isupper букв верхнього регістра (A-Z)
isxdigit шістнадцятирічних цифр (A-F, a-f, 0-9)

 

Функції приймають величину типу int і повертають значення true, якщо умова виконується. Рекомендується користуватися стандартними функціями, а не писати власні цикли перевірки, тому що це знижує кількість помилок у програмі.

Крім описаних вище, у бібліотеці є функції tolower й toupper, що переводять символ латинського алфавіту відповідно в нижній

Функції.

 

Зі збільшенням обсягу програми стає неможливим утримувати в пам'яті всі деталі. Природним способом боротьби зі складністю будь-якого завдання є її розбивка на частині. В C++ завдання може бути розділена на більше прості й доступні для огляду за допомогою функцій, після чого програму можна розглядати в більше укрупненому виді — на рівні взаємодії функцій. Це важливо, оскільки людина здатна пам'ятати обмежену кількість фактів. Використання функцій є першим кроком до підвищення ступеня абстракції програми й веде до спрощення її структури.

Поділ програми на функції дозволяє також уникнути надмірності коду, оскільки функцію записують один раз, а викликати її на виконання можна багаторазово з різних крапок програми. Процес налагодження програми, що містить функції, можна краще структурировать. Часто використовувані функції можна поміщати в бібліотеки. У такий спосіб створюються більше прості в налагодженні й супроводі програми.

 

Прототипи та визначення.

 

Функція - це іменована послідовність описів й операторів, що виконує яку-небудь закінчену дію. Функція може приймати параметри й повертати значення.

Будь-яка програма на C++ складається з функцій, одна йз яких повинна мати ім'я main (з її починається виконання програми). Функція починає виконуватися в момент виклику. Будь-яка функція повинна бути оголошена й визначена. Як і для інших величин, оголошень може бути трохи, а визначення тільки одне. Оголошення функції повинне перебувати в тексті раніше її виклику для того, щоб компілятор міг здійснити перевірку правильності виклику. Оголошення функції (прототип, заголовок, сигнатура) задає її ім'я, тип значення, що повертає, і список переданих параметрів. Визначення функції містить, крім оголошення, тіло функції, що представляє собою послідовність операторів й описів у фігурних дужках:

 

[ клас ] тип ім'я ([ список_параметрів ])[throw (виключення)]

{ тіло функції }

 

Розглянемо складові частини визначення.  

· За допомогою необов'язкового модифікатора клас можна явно задати область

видимості функції, використовуючи ключові слова extern й static:

- extern — глобальна видимість у всіх модулях програми (по умовчанню);

- static — видимість тільки в межах модуля, у якому визначений

· Тип повертає функцією значення може бути кожним, крім масиву й функції (але може бути покажчиком на масив або функцію). Якщо функція не повинна повертати значення, указується тип void.

· Список параметрів визначає величини, які потрібно передати у функцію при її виклику. Елементи списку параметрів розділяються комами. Для кожного параметра, переданого у функцію, указується його тип й ім'я (в оголошенні імена можна опускати).

· Про виключення, оброблюваних функцією, розповідається в розділі “Список виключень функції”.

У визначенні, в оголошенні й при виклику однієї й тієї ж функції типи й порядок проходження параметрів повинні збігатися. На імена параметрів обмежень по

ными аргументами, а в прототипах імена компілятором ігноруються (вони служать тільки для поліпшення читаності програми).

Функцію можна визначити як убудовану за допомогою модифікатора inline, що рекомендує компіляторові замість звертання до функції поміщати її код безпосередньо в кожну крапку виклику. Модифікатор inline ставиться перед типом функції. Він застосовується для короткі функції, щоб знизити накладні витрати на виклик (збереження й відновлення регістрів, передача керування). Директива inline носить рекомендаційний характер і виконується компілятором у міру можливості. Використання inline-функцій може збільшити обсяг виконує программы, що. Визначення функції повинне передувати її викликам, інакше замість inline-розширення компілятор згенерує звичайний виклик. Тип значення, що повертає, і типи параметрів спільно визначають тип

Для виклику функції в найпростішому випадку потрібно вказати її ім'я, за яким у круглих дужках через кому перераховуються імена переданих аргументів. Виклик функції може перебувати в будь-якому мосту програми, де по синтаксисі припустиме вираз того типу, що формує функція. Якщо тип значення, що повертає функцією, не void, вона може входити до складу виражень або, в окремому випадку, розташовуватися в правій частині оператора присвоювання. Приклад функції, що повертає суму двох цілих величин:

 

#include <iostream.h>

int sum(int a. int b);              // оголошення функції

int main(){

int a = 2, b = 3. c, d:

с = sum{a, b);                    // виклик функції

cin ” d;

cout “ sum(c. d):               // виклик функції

return 0;

}

Int sum(int a, int b){               // визначення функції

return (a+b);

}

 

При спільній роботі функції повинні обмениватся інформацією. Це можна здійснити за допомогою глобальних змінних, через параметри й через значення, що повертає функцією.

 



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 130; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.97.219 (0.011 с.)