
Теоретичні відомості
Символьна константа складається з одного символа ASCII між апострофами (''). Приклади спеціальних символів:
Новий рядок |
'\n' |
Горизонтальна табуляція |
'\t' |
Повернення каретки |
'\r' |
Апостроф |
'\'' |
Лапки |
'\"' |
Нульовий символ |
'\0' |
Зворотний слеш |
'\\' |
Стринги є одним з найбільш корисних та важливих типів даних мови С++. Символьний рядок (стринг) — це масив символів, взятий у лапки ("). Він має тип char. Нульовий символ (\0) автоматично додається останнім байтом символьного рядка та виконує роль ознаки його кінця. Кількість елементів у масиві дорівнює кількості символів у стрингу плюс один, оскільки нульовий символ також є елементом масива. Кожна стрингова константа, навіть у випадку, коли вона ідентична іншій стринговій константі, зберігається у окремому місці пам'яті. Якщо необхідно ввести у рядок символ лапок ("), то перед ним треба поставити символ зворотного слешу (\). У стринг можуть бути введені будь-які спеціальні символьні константи, перед якими стоїть символ \.
Прототипи всіх функцій, що працюють з рядками символів, містяться у файлі string.h. Всі функції працюють з рядками, що закінчуються нульовим символом. Ось деякі з них:
int strcpy(char *s1, char *s2) — копіювати рядок s2 у рядок s1;
int strlen(char *s) — визначити довжину рядку (кількість символів без нульового символа).
сhar *strcat(char*s1,const char*s2) – з’єднати два рядки s1 і s2;
сhar *strcpy(char*s1,const char*s2) – копіює рядок s1 в рядок s2;
int *strcmp (const char*s1,const char*s2) порівнює рядки s1 і s2 . Повертає 0, якщо рядки одинакові, число менше за ноль, якщо s1< s2 і число більше за ноль, якщо s1> s2.
char strlwr(char *s) – перетворює малі літери рядка у великі літери (опрацювуються тільки літери латинського алфавіту);
char strupr(char *s) - перетворює великі літери рядка у малі літери (опрацювуються тільки літери латинського алфавіту);
char *strchr (const char*s1,int s)- виконує пошук символа s у рядку s1 і повертає вказівник на перший знайдений символ або, якщо символ не знайдено то символ NULL
У файлі ctype.h описано прототипи функцій, що призначені для перевірки літер. Ці функції повертають ненульове значення (істина), коли її аргумент задовольняє заданій умові або належить вказаному класу літер, та нуль в іншому випадку. Наприклад:
int islower(int с) — символ с є малою літерою;
int isupper(int c) — символ с є великою літерою;
int isalnum(int c) — символ с є буквою або цифрою;
int isalpha(int c) — символ с є буквою;
int tolower(int c) — перетворення літери у нижній регістр;
int strtol(int c) — перетворення стрингу у довге ціле число;
Завдання для самостійної роботи
1. Опрацювати теоретичний матеріал
2. Проаналізувати умову задачі.
3. Розробити алгоритм та створити програму розв’язання задачі згідно з номером варіанту.
4. Результати роботи оформити протоколом.
Приклад виконання завдання
Написати програму, яка обчисляє значення виразу N0O1N1O2...OkNk , де Ni – ціле одно розрядне число,OI – один з двох знаків арифметичних операцій: додавання (+) або віднімання (-). Далі наведено рекомендований вигляд екрану під час роботи програми (дані, що вводяться користувачем виділені жирним шрифтом)
Введіть арифметичний вираз, наприклад 4+5-3-5+2
9-5+4+2-6
Значення введеного виразу: 4
// Обчислення значення арифметичного виразу
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
char st[40]; // рядок
char buf[10]; //зображення чергового числа
char op; //оператор
int rez;………….//значення виразу
int n; //чергове число
int i,j;
cout<<”введіть арифметичний вираз\n”;
cout<<” наприклад 4+5-3-5+2\n”;
cout<<”пропуски та інші знаки недопустимі\n”;
cin>>st; //введення рядка
cout<<”введений вираз\n”;
printf("\n%s",st); //виведення рядка
rez=0; //значення виразу
op=’ ‘;
i=j=0;
while (st[i])
{// введіть число
j=0;
while(st[i]>=’0’ && st[i]<=’9’ )
buf[j++]=st[i++];
buf[j]=’\0’;
n=atoi(buf); //перетворити рядок в ціле
// виконати дії
switgh(op)
{
case ‘+’: rez+=n; break;
case ‘-‘: rez-=n; break;
case ‘ ‘:rez=n; break;
}
// виділити знак операції
op=st[i++];
}
cou t <<”значення виразу:”<<rez);
getch();
}
Завдання до роботи
Скласти програму завдання, відповідно до варіанту. Текст вибрати самостійно, ввести і отримати результати. Під текстом в даному завданні слід розуміти послідовність, що містить від 1 до 255 символів. Групи символів, що розділенні пропусками і не містять пропусків всередині, назвемо словами.
У звіті відтворити введений текст і одержаний результат.
Варіанти завдань
1. Дано текст. Визначити, скільки яких цифр він містить.
2. Дано текст. Визначити, скільки букв він містить.
3. Дано текст. Визначити, чи є в ньому символи +,-,=,*.
4. Дано число. Кожну групу символів 120 у цьому числі замінити на символи 478.
5. Дано текст. Визначити, чи містить він символи, відмінні від букв і цифр.
6. Дано текст. Якщо в тексті немає символа *, то залишити цей текст без змін. Якщо ж ні, то кожну малу латинську літеру замінити на цифру 1 .
7. Дано текст. Якщо в ньому є цифра 2, то кожен символ перед цією цифрою замінити на букву а.
8. Дано текст. Якщо в ньому є символ +, то кожен наступний після + символ замінити символом -.
9. Дано текст. Якщо в ньому є малі латинські букви то кожен символ, що знаходиться за кожною групою малих латинських букв, замінити крапкою.
10. Дано текст. Визначити, скільки він містить крапок.
11. Дано текст. Порахувати кількість слів у тексті.
12. Дано текст. Знайти всі слова, що містять букву а.
13. Дано текст. Знайти всі слова, що не містять букву о.
14. Дано текст. Знайти всі слова, що починаються з букви с і закінчуються буквою а.
15. Дано текст. У словах, що закінчуються на іпg замінити це закінчення на еd.
. Контрольні запитання
Чим відрізняється рядок від буфера?
Які ви знаєте класи функцій для обробки символьної інформації?
Наведіть приклади функцій:
- для роботи з буферами;
- для роботи зі стрингами;
- визначення класу символів та перетворення символів.
- перетворення даних.
Лабораторна робота № 9
Тема : Програмування з використанням функцій
Мета роботи: Оволодіння практичними навичками використання функцій
Теоретичні відомості
Програма на мові С++ складається з однієї або декількох функцій. Функція — це логічно самостійна частина програми, яка може отримувати параметри, та повертати значення. Функція має наступний формат визначення:
[тип_даних] ім'я_функції (перелік_аргументів | void)
{
опис даних
оператори
[return (вираз)]
}
Сукупність виразів у фігурних дужках називається тілом фунції. Поле тип_даних задає тип значення, що повертає фунція. Якщо воно відсутнє, то вертається значення int. Якщо поле тип_даних містить ключове слово void, функція не повертає ніякого значення.
Поле ім'я_функції — це ім'я (вказівник) функції.
Поле перелік_аргументів визначає аргументи, що передаються в функцію, та містить будь-яку комбінацію типів та імен. Це поле є необов'язковою частиною визначення функції. Якщо у функцію не передаються ніякі аргументи, це поле може бути порожнім або містити ключове слово void.
Звернення до функції має вигляд:
ім'я_функції(перелік_аргументів);
Перелік аргументів складається з виразів, відділених комами, типи яких повинні співпадати з типами відповідних параметрів.