русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


ОПОРНИЙ КОНСПЕКТ


Дата додавання: 2014-11-28; переглядів: 859.


Для опрацювання масивів символів у мові С++ є стандартні функції, які описані у модулі string.h. Розглянемо деякі з них.

strlen(<рядок>) – визначає фактичну кількість символів у рядку, застосовується у виразах;
strcat(r1, r2) – команда з’єднання рядків r1, r2 в один рядок, результат присвоює змінній r1;
strncat(r1, r2, n) – до змінної r1 додає перших п символів рядка r2, команда;
strcpy(r1, r2) – копіює символи з рядка r2 в рядок r1, команда;
strncpy(r1, r2, n) – копіює перших n символів рядка r2 в рядок r1, команда;
strchr(r1, <символ>) – визначає перше входження деякого символу у рядок r1 так: повертає рядок, який починається від першого входження заданого символу до кінця рядка r1, застосовується у виразах;
strrchr(r1, <символ>) – визначає останнє входження заданого символу у рядок, застосовується у виразах;
strspn(r1, r2) – визначає номер першого символу, який входить у рядок r1, але не входить у рядок r2, застосовується у виразах;
strstr(r1, r2) – визначає в рядку r1 підрядок, що починається з першого входження рядка r2 у рядок r1, застосовується у виразах;
strtok(r1, r2) – визначає частину рядка r1, яка закінчується перед першим однаковим символом рядків r1 та r2;
strnset(r1, <символ>, n) – вставляє n разів заданий символ перед рядком r1, застосовується у виразах;
strupr(r1) – перетворює усі малі літери рядка у великі;
strlwr(r1) – перетворює усі великі літери рядка у малі;
strrev(r1) – записує рядок у зворотному порядку.

Приклад 2. Розглянемо результати застосування функцій до таких змінних:

charLviv[] = “Львівська політехніка”,

Un[30] = “НУ”,

r1[30] = “”;

char*p; intn;

Застосування функцій Результат
n = strlen(Lviv)  
strcat(Un, Lviv)  
strncat(Un, Lviv, 10)  
strcpy(r1, Lviv)  
strncpy(r1, Lviv, 10)  
p = strchr(Lviv, ‘П’)  
p = strrchr(Lviv, ‘i’)  
n = strspn(Lviv, “Львів”)  
p = strstr(Lviv, “тех”)  
p = strtok(Lviv, “кс”)  
p = strnset(Lviv, ‘x’, 10)  
p = strupr(“I Love You”)  
p = strlwr(“I Love You”)  
p = strrev(“техніка”)  

Зауваження 2. Функції перетворення літер strlwrіstrupr діють лише для латинського алфавіту. Крім того, у деяких версіях мови С++ ці функції можуть записуватись інакше: _strlwr, _strupr.

У бібліотеці stdlib.h є стандартні функції перетворення типів даних. Зокрема, функція atoi(r1) перетворює рядок символів r1 у дане цілого типу int, а функція іtoа(<числове дане>, r1, <система числення>) – дане цілого типу int у рядок r1. Для перетворення даних типу double у рядок символів визначена функція gcvt(<числове дане>, <кількість знаків у числі>, r1), а обернену дію виконує функція strtod.

Приклад 3. Розглянемо результати дії цих функцій для оголошених нижче змінних.

intn;

doublef;

char r1[5], *p;

Застосування функції Результат
n = atoi(“12”)  
itoa(12, r1, 10)  
gcvt(-3.14, 4, r1)  
f = strtod(“-3.1415”, &p)  

Рядки символів можна порівнювати між собою. Два рядки порівнюють зліва направо посимвольно, причому ‘А’ < ’В’, ‘В’ < ‘С’ тощо. Більшим вважається символ, який розміщений в алфавіті далі (він має більший номер у таблиці кодів ASCII, див. далі). Для порівняння рядків у модулі string.h надані такі функції:

· strcmp(r1, r2) – порівнює рядки символів r1 і r2 з урахуванням регістра для латинського алфавіту;

· stricmp(r1, r2) – порівнює рядки r1 і r2, не розрізняючи великих і малих літер латинського алфавіту.

Результатом виконання цих функцій є від’ємне число (якщо рядок r1 менший від рядка r2), 0 (якщо рядки однакові) або додатне число (рядок r1 менший від рядка r2).

Приклад 4. Розглянемо результат дії функцій

Функція Результат
n = strcmp(“Весна”, “весна”)  
n = strcmp(“весна”, “Весна”)  
n = strcmp(“Весна”, “Весна”)  
n = strіcmp(“Весна”, “весна”)  
n = strіcmp(“Vesna”, “vesna”)  

Задача 1 (про довжину фрази).Увести рядок символів та визначити його довжину.

Зробимо це двома способами:

1) за допомогою вказівника типу char і виділення динамічної пам’яті:

#include<iostream.h> // Довжина рядка символів voidmain() { char*s; // Оголошуємо вказівник на рядок s = new char[50]; // Виділяємо пам’ять для введення рядка cin>> s; intd = 0; while(*s++) d++; cout<< d; }

2) визначивши різницю адрес першого й останнього символів:

#include<iostream.h> // Довжина рядка символів voidmain() { char*s, *p; // Оголошуємо вказівник на рядок s = new char[50]; // Виділяємо пам’ять для введення рядка cin>> s; p = s; // Вказівник р вказує на перший символ рядка // Вказівник s тепер вказуватиме while(*s++); // на останній символ рядка intd; // Визначаємо довжину рядка як різницю адрес d = s – p + 1; cout<< d; }

Задача 2 (про пошук слова у фразі). Нехай задано рядок "Скоро будуть канікули". Визначити довжину рядка. Вивести на екран друге слово цього рядка.

#include<iostream.h> // Пошук другого слова за допомогою функцій #include<string.h> voidmain() { charr1[] = “Скоро будуть канікули”; char*p; cout<< r1 << “\n”; cout<< “Довжина рядка r1 = ” << strlen(r1) << “\n”; // Встановлюємо вказівник р на перший пропуск p = strchr(r1, ‘ ‘); // у рядку r1 // З рядка р вилучаємо всі символи після його strtok(p, “ “); // першого пропуску cout<< p; }

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

#include<iostream.h> // Рядок як масив символів #include<conio.h> #include<string.h> voidmain() { clrscr(); charr1[] = “Скоро будуть канікули”; char*p; intn1, n2, k, m; m = 0; k = strlen(r1); cout<< “Довжина рядка r1 = ” << k << “\n”; for(inti = 0; i < k; i++) // Переглядаємо всі символи рядка if(r1[i] == ‘’) // Шукаємо пропуск { m++; // Визначаємо номери першого if(m == 1) n1 = i; // та другого if(m == 2) n2 = i; // пропусків } // Виводимо слово між двома пропусками for(i = n1 + 1; i < n2 – 1; i++) cout<< r1[i]; getch(); }

<== попередня лекція | наступна лекція ==>
Приклад 1. | Тренувальні вправи


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн