Базовий курс програмування на С++. Урок 17. Рядки в C++. Робота з рядками. |
Написав Joker | |||||
Неділя, 20 березня 2016 15:25 Переглядів: 10747
|
|||||
Цінуйте будь-який досвід. Він робить вас сильнішими. ©Inspired Сьогодні ми вивчимо 1. Розв’язок попереднього домашнього завдання 2. Рядки та їх створення 3. Функції для роботи з рядками 4. Домашнє завдання
Розв’язок попереднього домашнього завдання 1. Написати калькулятор без використання змінних
2. Знайти факторіал числа використовуючи тільки вказівники
3. За допомогою посилань на функції знайти суму трьох максимальних значень масиву. Розмір масиву задає користувач. Заповнення випадковими числами.
4. Підрахувати суму перших 20 натуральних чисел використовуючи вказівник на вказівник.
Рядки та їх створення Найпростіший варіант створювати і використовувати символьні масиви для роботи з рядками, проте такий масив (типу char) не завжди можна вважати рядком. Справа з тому, що рядок повинен містити нульовий байт /0, він символізує кінець. Наприклад: 1 – це звичайний масив який зберігає символи 2 – рядок Звісно, звичайні правила при роботі з масивами дійсні, тому теоретично можна ввести рядок приблизно так: char str[6] = {'H', 'e', 'l', 'l', 'o', '/0'}; Але при роботі з рядками можна робити дещо простіше. Такий запис теж працює: char str[] = "Hello"; cout<<str<<endl; По-перше, не потрібно вказувати розмір масиву (тільки при такому способі ініціалізації). При виводі достатньо тільки імені масиву. Варто пам’ятати, коли вказуєте розмір, то він повинен перевищувати кількість символів хоча б на 1 елемент. Ще один нюанс: 1 – символ. 2 – рядок який складається з одного символу. Крім того можна користуватися вказівниками. char *str; str = "Hello"; cout<<str<<endl;
Але давайте подивимося, як відреагує програма на просту задачку ввести рядок з клавіатури. Таке часто буває дійсно потрібним. Якщо ми будем вводити все за допомогою циклу, то все буде ок, але це зайва робота. Треба спростити. Можна спробувати так: На перший погляд все працює. Якщо ввести для прикладу hello, то результат буде hello, що вірно. Але це рядок і він може містити пробіли. Тепер ми виявили проблему, якщо ввести два слово через пробіл то введення закінчиться після пробілу, а результатом буде тільки перше слово. Згадайте, що відбувалося коли ми заповнювали елементи масиву через пробіл. Тому, вирішення називається cin.getline(). Приймає: - ім’я рядка - кількість символів для введення Давайте виправимо нашу програму. Тепер ввівши Hello world, отримаємо те саме, повністю.
Функції для роботи з рядками Ще трохи інформації про рядки. 1. Нам може знадобитися визначити довжину рядка без нульового символу. Наприклад, ви знаєте, що поставили обмеження на кількість символів 100, але рядок може складатися тільки з 1. Наша програма буде працювати швидше якщо буде знати кількість використаних символів. Це робиться за допомогою ф-ції strlen(), приймає ім’я рядка. 2. strcat(s2,s1), якщо потрібно об’єднати два рядки. Зберігається у s2 3. strcmp(s1,s2) – порівнює два рядки. Повертає ціле число. Якщо s2<s1, то отримуємо число <0, якщо s2>s1 -> >0, якщо s1 = s2 -> 0 4. Функція strcpy(s,s1) копіює рядки. 5. strrev() – інверсія символів крім 0 байту. 6. strstr(s1,s2) – шукає рядок s2 у рядку s1, якщо пошук не дав результатів повертає 0, інакше адресу першого елемента знайденого рядка.
Список функцій набагато більший ніж я подав вище. Їх багато і вони будуть плутатися у вас у голові. Ви запам’ятаєте їх тільки тоді коли будете регулярно використовувати, в іншому випадку доведеться створювати власні. Думаю, буде краще якщо ви витратите трохи більше часу, щоб загуглити потрібне, але тоді вже точно запам’ятаєте. 1. isalpha (). Першим ділом потрібно додати бібліотеку #include <cctype>. У параметрі вказуємо, що саме перевіряти. Функція перевіряє чи є даний символ літерою англійського алфавіту. 2. Заміна регістрів: 2.1. а -> A strcpy(str_small, strup(str_big)); str_small – рядок з маленькими літерами, str_big – рядок з великими літерами. 2.2. A -> a strcpy(str_big, strlvr(str_small)); 3. Інколи cin.getline() працює некоректно. Це відбувається, тому що зчитується зайвий Enter. Таке можна спостерігати у приблизно такому коді. cin>> x; cin.get(); cin.getline(str); Цей фрагмент вже виправлений, але без 2 рядка у вас могли б виникнути проблеми. Без ф-ції cin.get(), cin.getline() може працювати некоректно.
Домашнє завдання 1. Вивести рядок навпаки. ( 16 Проголосувало ) Новіші матеріали:
Старіші матеріали:
3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved." |