Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні icon

Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні



НазваниеЛабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні
Дата конвертации15.07.2013
Размер90.26 Kb.
ТипЛабораторна робота
скачать >>>

Лабораторна робота №10
Робота з рядками (string)




Мета роботи: отримати навички роботи з рядками.

10.1. Теоретичні відомості




Рядки в С++



В С++ з'явилася дуже корисна бібліотека роботи з рядками. Вона досить ефективна і дозволяє легко вирішувати наступні задачі:

1. Створювати, присвоювати, копіювати і видаляти рядки.

2. Виконувати перетворення типів символьних змінних.

3. Порівнювати рядки.

4. Поєднувати рядки.

5. Визначати довжину рядка.

6. Знаходити і заміщати потрібний фрагмент у рядку.

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

string hi(“hello”); // створення й ініціалізація нового рядка

string lo=“greetings”; // ще одна ініціалізація

string es=””; // порожній рядок

Рядковим змінним можна присвоювати значення, як змінним будь-яких інших типів:

string name(“Fred”);

name = “Flintstone”; // зміна імені

При цьому всі операції розподілу пам'яті будуть виконані коректно. Операції введення та виведення (<< і >>) перевантажені і для рядків, тому виконати введення або виведення рядка дуже легко.

#include //заголовний файл з бібліотеки STL

#include

using namespace std;

int main()

{

string s;


while (cin >> s) // зчитування кожного слова зі стандартного потоку cin

cout << s << endl; // виведення кожного слова в окремому рядку

return 0;

}

Операція + перевантажена для рядків і означає конкатенацію. Операції порівняння (==, > і т.д.) теж перевантажені для рядків.



string hi(“hello”);

string lo=”greetings”;

string r = hi + ‘ ’ + “world”; // конкатенація трьох рядків

r += ‘!’; // так теж можна! (r = “hello world!”)

r = string(3, ‘!’); // r = “!!!”;

if (hi == “hello”)

if (lo > “great”)

if (lo < hi)



У бібліотеці міститься ще декілька корисних функцій, використання яких демонструється на наступному прикладі:

cout << hi.find(“ll”); // повертає 2 (позицію самого лівого входження “ll”)

cout << hi.find(‘l’); // працює завдяки автоматичному приведенню типів

cout << hi.rfind(‘l’); // виконує пошук з кінця (повертає 3)

cout << lo.find(“g”); // повертає 0 (положення самого лівого входження ‘g’)

cout << lo.find(“g”, 5); // повертає 7 (саме ліве входження ‘g’ після 5).

cout << hi.find(“x”) // повертає string::npos

string s(“Testing!”);

cout << s.substr(2, 5); // “sting”

cout << s[3]; // ‘t’

s.replace(2,2,”eth”); // s == “Teething!”

s.erase(1,4); // s == “Ting!”

s[1] = ‘a’; // s == “Tang!”

s.insert(1,”w”); // s == “Twang!”


^

Стандартна бібліотека шаблонів С++



Крім типу string, мова С++ має декілька інших корисних доповнень. Ці доповнення об'єднані разом у стандартній бібліотеці шаблонів — Standard Template Library (STL). Ця бібліотека включає додаткові типи (вектори, множини, матриці і т.д.) і алгоритми (сортування, пошуку, виконання матричних операцій і т.д.). Як випливає із самої назви, STL — це родова бібліотека, і її типи та методи можуть застосовуватися до будь-якого базового типу. Наприклад, ви можете створити вектор цілих чисел, вектор символів, вектор, компонентами якого є числа з подвійною точністю або елементи типу, заданого користувачем.

Щоб продемонструвати використання бібліотеки STL, розглянемо приклад з векторами. Вектор, подібно масиву, являє собою упорядкований список елементів, до яких існують ефективні методи доступу. Однак вектор має значну перевагу в порівнянні з масивом, оскільки його розмірність автоматично збільшується при додаванні нових елементів. Щоб забезпечити можливість використання векторів, необхідно включити у свою програму заголовний файл і використовувати простір імен std.

#include

using namespace std;

Щоб створити цілочисельний вектор, необхідно оголосити його :

vector i_vec;

Тут оголошена змінна i_vec, що являє собою порожній цілочисельний вектор (на це вказує ). Для додавання елементів до цього вектора використовується метод push_back():

i_vec.push_back(3); // поміщаємо 3 у кінець вектора

i_vec.push_back(1); // потім добавляємо 1

i_vec.push_back(2); // і, нарешті, 2

// тепер i_vec містить три елементи

// виведення вектора

for (int ix = 0; ix < i_vec.size(); ix++)

cout << i_vec[ix] << “ “;

// виводиться: 3 1 2

Подібно іншим типам, векторам можна присвоювати значення з використанням операції = і виконувати над ними операцію порівняння ==. Наприклад:

vector vecA, vecB;

vecA.push_back(3); vecA.push_back(2);

vecB = vecA; // vecB = (3, 2)

vecB[1] = 0; // vecB = (3, 0)

if (vecA == vecB) cout << “Рівні!” << endl;

Операція == виконує поелементне порівняння двох векторів. У даному випадку вектори не рівні між собою.

10.2. Приклад



#include

using namespace std;

int main()

{

string hi(“hello”); // створення й ініціалізація нового рядка

string lo=“greetings”; // ще одна ініціалізація

string g(lo); // третя ініціалізація

string es=””; // порожній рядок

string s; // ініціалізація порожнього рядка

return 0;

}

^

10.3. Порядок виконання роботи



10.3.1. Проаналізувати умову задачі.

10.3.2. Розробити алгоритм та створити програму розв’язання задачі згідно з номером варіанту.

10.3.3. Результати роботи оформити протоколом.

^

10.4. Варіанти завдань



Знайти кількість входжень заданого символу в заданий рядок.

1. Отримати рядок, що являє собою конкатенацію двох рядків.

2. Визначити довжину рядка.

3. Порівняти два введених рядки.

4. Замінити всі входження символу 'а' в рядку на символ 'б'.

5. Замінити перший та четвертий символ рядка на букву 'а'.

Завдання підвищеної складності.

1. Задано послідовність стрингів різної довжини. Отримати номери всіх рядків, що містять як фрагмент перший рядок. В результаті отримати послідовності стрингів з виключеними пробілами та знайденими фрагментами першого рядка.

2. Дано натуральне число n, символи . Визначити число входжень у послідовність групи літер abc, aba.

3. Скласти програму, що дозволяє визначити позиції всіх входжень у заданий рядок якого-небудь символа із другого заданого рядка. Результатом роботи програми повинна бути -1, якщо перший рядок не містить в собі жодного символа, що належить водночас другому рядку.

4. Скласти процедуру "стиснення" вхідної послідовності символів: кожна підпослідовність, що складається з декількох входжень одного і того ж символа, замінюється на текст , де — символ, а — рядок, що є записом числа входжень символа у вхідну послідовність.

5. Скласти процедуру побудови рядка символів, що є записом заданого дійсного числа у десятковій, двоїчній та 16-ричній системах числення. Рядок повинен містити вказану кількість цифр після коми.

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

7. Зафіксуємо натуральне число та перестановку чисел (її можна задати за допомогою послідовності натуральних чисел , в яку входить кожне з чисел ). Під час шифровки у вхідному тексті до кожної з послідовних груп по символів застосовується зафіксована перестановка. Нехай =4 та перестановкою є 3,2,4,1. Тоді група символів замінюється на . Якщо в останній групі менше чотирьох символів, то до неї добавляються пробіли. Користуючись наведеним способом, зашифрувати та розшифрувати заданий текст.

8. Ввести з клавіатури стрингову константу, переводячи малі літери у великі. Виділити 16-річні константи, перемножити їх. Представити виділені числа та їх добутки у десятковій системі счислення.

9. Ввести послідовностей стрингових констант різної довжини. Представити їх у вигляді символьної матриці розмірності , де — змінна, що задається з клавіатури. Перевести кожний символ у відповідний код ASCII.

10. Ввести послідовностей стрингових констант різної довжини. Вирівняти їх у відповідності з довжиною найбільш короткої. Представити їх у вигляді символьної матриці. Виконати:

1) установку заданих елементів матриці у задане значення;

2) Визначити номери ідентичних рядків.

11. Ввести символьну матрицю. Інвертувати її відносно середини рядку. Перетворити матрицю у стринг. Знайти довжину стринга.

12. Ввести стрингову константу. Перетворити її у трьохдіагональну матрицю, присвоївши для цього нулі відповідним елементам. Транспонувати отриману матрицю відносно середини (середнього рядку). Конкатенувати два рядки отриманої матриці. Вивести всі проміжні та кінцеві результати.

13. Ввести стрингові константи. Знайти найбільше слово серед слів, друга літера яких є літерою а; якщо слів з найбільшою довжиною є декілька, то знайти останнє. (Словом будемо називати групи символів, що поділені пробілами (одним або декількома), а також що не містять в собі пробілів.) Якщо таких слів нема, то повідомити про це. Розв'язати цю задачу, якщо:

1) слова складаються не більш як із 10 символів;

2) не накладено обмежень на кількість символів у слові.

14. Знайти у заданій послідовності кількість слів, у яких перший та останній символ співпадають. Знайти довжину найкоротшого слова.

15. Ввести дві стрингові константи. Визначити співпадання їх компонент. У випадку розходжень отримати номери не співпадаючих компонент. У результаті отримати перетин стрингів.

16. Для того щоб зашифрувати текст з 121 літери, його можна записати у квадратну матрицю порядку 11 по рядках, після чого прочитати його по спіралі, починаючи з центра (елемента, що має індекси 6,6). Зашифрувати та розшифрувати заданий текст. Текст вводиться з клавіатури.

17. Наступний спосіб призначений для шифровки послідовностей нулів та одиниць (або крапок та тире). Нехай — така послідовність. Послідовність — результат шифрування, що створено за допомогою наступного закону:



Використовуючи наведений спосіб, зашифрувати та розшифрувати задану послідовність.

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

19. Реалізувати спосіб шифрування, який полягає у табличній заміні кожного символа другим символом — його шифром. Вибрати деяку таблицю, розробити спосіб її представлення. Зашифрувати та розшифрувати текст.

20. Задано символьну матрицю розмірністю .

1) Транспонувати її відносно головної діагоналі.

2) Представити верхню діагональну матрицю стрингами.

21. Задано дві матриці цілих чисел розмірністю та відповідно. Виконати перемноження цих матриць, якщо це не можливо, зменшити їх таким чином, щоб це можна було зробити. Обчислити кількість елементів отриманої після перемноження матриці. Представити її у вигляді стрингів.

22. Ввести з клавіатури стрингову константу, не відрізняючи малі та великі літери. Визначити кількість входжень в неї 16-ричних чисел. Подати знайдені числа у двоїчній та десятковій системах числення.

23. Нехай по деякому каналу зв'язку передається повідомлення, що має вигляд послідовності нулів та одиниць (або крапок та тире). Із-за завад можливий помилковий прийом деяких сигналів: нуль може бути прийнятий як одиниця та навпаки. Можна передавати кожний сигнал тричі, замінюючи, наприклад, послідовність 1,0,1 послідовністю 111 000 111. Три послідовні цифри під час розшифровки замінюються тією цифрою, яка зустрічається серед них найчастіше. Таке шифрування підвищує стійкість до помилок. Написати програму розшифровки.

24. Групи символів, що розмежовані пробілами (одним або декількома) та не містять пробілів у середині себе, називаються словами. Порахувати кількість слів у заданій послідовності, що починаються з літери b. Розташувати слова у алфавітному порядку.

25. Знайти у заданій послідовності кількість слів, у яких перший та останній символ співпадають. Знайти довжину найкоротшого слова.

26. Знайти у заданій послідовності слова, що містять групи літер ba, ma. Замінити малі літери в цих словах однойменними великими.

10.5. Контрольні запитання


1. Яка корисна бібліотека роботи з рядками з’явилася у С++ і які задачі вона може вирішувати?

2. Які додаткові типи і алгоритми включає у себе бібліотека STL?



Похожие:

Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні
Мета роботи: отримати навички роботи з вказівниками, посиланнями та динамічними масивами
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №2 Умовна операція та множинний вибір Мета роботи : отримати навички роботи з умовною операцією та оператором множинного вибору. Теоретичні
Мета роботи: отримати навички роботи з умовною операцією та оператором множинного вибору
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №5 Функції Мета роботи : отримати навички роботи з функціями. Теоретичні
Кожна програма у своєму складі повинна мати головну функцію main(). Саме функція main() забезпечує створення точки входу в об’єктний...
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №9 Передача масивів у функції Мета роботи: отримати навички роботи з масивами у функціях. Теоретичні
Масиви можуть бути параметрами функцій, і функції як результат можуть повертати вказівник на масив. Розглянемо ці можливості
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №3 Цикл while з передумовою та постумовою Мета роботи : Отримати навички роботи з циклом while Теоретичні
При виконанні програми часто виникає необхідність неодноразового повторення однотипних обчислень над різними даними. Для цих цілей...
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №1 Принципи програмування на С++ Мета роботи : отримати навички роботи з типами даних та виразами. Теоретичні
Кожна програма на С++ у своєму складі повинна мати головну функцію main(). Саме функція main() забезпечує створення точки входу в...
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №4 Цикл for мета роботи : отримати навички роботи з циклом for. Теоретичні
При цьому виконуються три операції: ініціалізація лічильників циклів, порівняння його значення з деяким граничним значенням і зміна...
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №6 Масиви Мета роботи : отримати навички роботи з одно та багатовимірними масивами. Теоретичні
Масив являє собою набір однотипних об’єктів, які мають спільне ім’я і відрізняються місцезнаходженням в цьому наборі (або індексом,...
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота №8 Рекурсивні функції Мета роботи : отримати навички роботи з рекурсивними функціями. Теоретичні
Така необхідність виникає при реалізації динамічних структур даних, таких як стеки, дерева, черги. Для реалізації рекурсивних алгоритмів...
Лабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні iconЛабораторна робота 1 Тема. Класи та об’єкти. Мета роботи: засвоїти основні поняття об’єктно-орієнтованого програмування на прикладі мови програмування С++. Теоретичні
Основні поняття, потрібні для виконання роботи. Це 1 класи; 2 область доступу; 3 ієрархія класів
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©gua.convdocs.org 2000-2015
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов