- •Загальні положення ...………………………………………………………….........3
- •Загальні положення
- •1 Організація введення і виведення даних та розв’язання задач з простою змінною
- •1.1 Мета роботи
- •1.2 Вказівки до організації самостійної роботи студентів
- •1.2.1 Використання операторів введення
- •#Define sp " "
- •Int main ( )
- •Int main ( )
- •Int main ( )
- •Void main ( )
- •For ( [ вир1 ]; [ вир2] ;[ вир3 ] ) оператор;,
- •Void main ( )
- •Void main ( )
- •1.5 Контрольні питання
- •1.6 Варіанти індивідуальних завдань
- •2 Розв’язання задач c використанням одновимірних і двовимірних масивів
- •2.1 Ціль роботи Прищепити студентам навички розв’язання задач з використанням одновимірних і двовимірних масивів, складних циклів і використання покажчиків.
- •2.2 Методичні рекомендації з організації самостійної роботи студентів
- •Void main( )
- •Void main ( )
- •Void main ( )
- •Void main ( )
- •2.3 Використання покажчиків
- •Наиведемо програму з використанням покажчиків:
- •Int main ( )
- •Void main ( void )
- •2.4 Використання масивів і покажчиків
- •Приклад 2.4 Обчислити середнє значення додатних елементів одновимірного масиву.
- •Int *pmas;
- •2.5 Масиви покажчиків
- •Void main( )
- •2.6 Контрольні питання
- •2.7. Варіанти індивідуальних завдань
- •3 Вирішування задач з використанням даних символьного типу
- •3.1 Ціль роботи Вивчення засобів опису символьних типів даних і використання структур для обробки даних.
- •3.2 Методичні рекомендації з організації самостійної
- •Роботи студентів
- •3.2.1 Організація символьного введення - виведення
- •Device . Get (char_var);
- •3.2.2 Рядки як символьні масиви
- •3.2.3 Введення-виведення символьних масивів
- •Void main (void)
- •3.2.4 Основні функції обробки символьних типів
- •Void main (void)
- •Void del (char *st, int k, int n);
- •Void del(char *st, int, int);
- •Void main()
- •Void del(char *st,int k,int n)
- •[ Проміжки ] [знак числа] [ цифри].
- •Void main( )
- •Void main()
- •Void main()
- •Void main(void)
- •3.2 Контрольні питання і завдання
- •3.4 Варіанти індивідуальних завдань
- •4 Вирішувння задач з використанням даних типу структура
- •4.1 Ціль роботи Освоєння заходів розробки і налагодження програм з використанням
- •4.2 Методичні рекомендації з організації самостійної
- •Void main(void)
- •Void qsort (void *base , n , width,
- •Int (*fcmp) ( const void *elem1, const void *elem2) .
- •4.3 Контрольні питання
- •4.4. Індивідуальні завдання
- •5 Використання функцій при розробці програм
- •5.1 Ціль роботи
- •5.2 Методичні вказівки з організації самостійної роботи студентів
- •Void fun ( int p)
- •Void main ( )
- •Int main ( )
- •5.2.1 Використання покажчиків на функцію
- •Void main ( )
- •5.2.2 Використання масивів - параметрів функцій
- •Vоid sort (int mas [ 30 ]); .
- •Void sort ( int mas [ ], int n ) ; .
- •Void fun1 (char st [15]);
- •Int main ( )
- •Void fun1 ( char st[15] )
- •Void fun2 ( int mat [ ] [10], int rows, int cols );
- •Int main ( )
- •5.2.4 Звертання до функції і передача результату
- •Int main ( )
- •5.2.5 Перевантаження функцій
- •Int main ( )
- •5.3 Контрольні питання
- •5.4 Варіанти індивідуальних завдань
- •6 Робота з файлами
- •6.1 Ціль роботи
- •6.2 Методичні вказівки по організації самостійної роботи
- •Int main ( )
- •Int main ( )
- •Void main ( )
- •Ifstream in ( ”file1") ;
- •In.Close();
- •Перелік посілань
- •Навчальне видання
- •61726 Харків, просп. Леніна, 14.
3.2.4 Основні функції обробки символьних типів
У ранніх версіях С++ рядки розглядалися як символьні масиви і робота з ними ґрунтувалася на використанні цих масивів. Розроблена бібліотека функцій <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;