- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Функції для роботи з рядками
Існують два варіанти роботи з текстовою інформацією. Перший це скористатися С рядками - масивами символів, завершується нульовим символом. Для роботи з ними в стандартну бібліотеку входять наступні оптимізовані функції:
memset (void *, int, size_t) - встановлює n перших байт в вказане значення;
strcat (char *, const char *) - додає один рядок до іншої;
strchr (const char *, int) - шукає перше входження зазначеного символу в рядку;
strcmp (const char *, const char *) - порівнює два рядки (0 - рівні рядки, отрц. - перший рядок менше другої, полож. перший рядок більше другий);
strcpy (char *, const char *) - копіює один рядок в іншу;
strcspn (const char *, const char *) - шукає перше входження одного з символів одного рядка в інший (повертається позиція);
strlen (const char *) - повертає довжину рядка (без нульового символу кінця рядка);
strncat (char *, const char *, size_t) - додає n символів одного рядка до іншого.
strncmp (const char *, const char *, size_t) - порівнює n перших символів;
strncpy (char *, const char *, size_t) - копіювати n перших символів рядка в іншу;
strpbrk (const char *, const char *) - шукає перше входження одного з символів одного рядка в інший;
strrchr (const char *, int) - пошук символу з кінця;
strspn (const char *, const char *) - пошук першого символу не входить в зазначений рядок (повертається номер першого символу);
strstr (const char *, const char *) - пошук першого входження підрядка;
strtok (char *, const char *) - повертає наступний токен (елемент розбору).
Для їх використання необхідно включити файл string.h або string. Для функцій з префіксом str є аналогічні функції з префіксом wcs для рядків з символами типу wchar_t.
Функції пошуку повертають покажчик на позицію знайденого елемента або 0, якщо нічого не знайдено. Для аргументів вірні наступні правила: копіювання, додавання (куди, звідки), пошук (де, що). Функції не обробляють коректно нульові аргументи.
Динамічні рядки, клас string
Другий варіант це скористатися готовим класом, що реалізує рядок, наприклад string з STL. Замість стандартних алгоритмів пошуку STL, можна скористатися власними методами класу. У бібліотеці Boost визначені додаткові зручні рядкові алгоритми.
Крім STL свої класи мають такі бібліотеки як wxWidjets, VCL, MFC.
# Include <boost/algorithm/string.hpp>
# Include <iostream>
# Include <string>
using namespace std;
using namespace boost;
int main () {
string str, str2;
str = "He # l $ $ lo";
/ / Додавання рядка
str.append ("Wor # ld!!");
cout << "str after append:" << str << endl;
/ / Замінити ділянку рядки
str.replace (str.begin () +7, str.begin () +9, "@ @");
cout << "str after replace:" << str << endl;
/ / Видалити ділянку рядки (2 символу починаючи з 7)
str.erase (7,2);
cout << "str after erase:" << str << endl;
/ / Виділити підрядок з 3 символів, починаючи з 5 символу
cout << "substr demo:" << str.substr (5,3) << endl << endl << endl;
/ / --- Приклади деяких алгоритмів з Boost --- / /
erase_all (str, "#"); / / видаляємо всі #
cout << "after erase_all: |" << str << "|" << endl;
/ / Видалення порожніх символів зліва і справа
/ / Сама рядок не змінюється
cout << "left trim: |" << trim_left_copy (str) << "|" << endl;
cout << "right trim: |" << trim_right_copy (str) << "|" << endl;
/ / Видалення порожніх символів зліва і справа в самому рядку
trim (str);
cout << "after trim: |" << str << "|" << endl;
/ / Перевести символи рядка в верхній регістр
to_upper (str);
cout << "after to_upper: |" << str << "|" << endl;
/ / Перевести символи рядка в нижній регістр
to_lower (str);
cout << "after to_lower: |" << str << "|" << endl;
/ / Дорівнює чи префікс і суфікс рядка зазначеному рядку
cout << "is start of str = HEllo:" << starts_with (str, "HEllo") << endl;
cout << "is start of str = HEllo:" << istarts_with (str, "HEllo") << endl;
cout << "is end of str = \"!! \ ":" << ends_with (str, "!!") << endl;
/ / Знайти друге входження (від 0) підрядка
str = "abLO ffffab abLO abLO";
cout << "now str:" << str << endl;
cout << "find 2 entry of ab in str:" << find_nth (str, "ab", 2) << endl;
cout << "find 2 entry of ab3 in str:" << find_nth (str, "ab3", 2) << endl;
/ / Видалення другого входження підрядка
erase_nth (str, "ab", 2);
cout << "after erase_nth:" << str << endl;
}
Питання для контролю:
1.Які є способи роботи з рядками?
2. Які є функції роботи з рядками?
3. Як працювати з динамічними рядками?
Література:
1. Культин Н. С/С++ в задачах и примерах. –СПб.:БХВ-Петербург, 2001. –288 с.- с. 283-285
Урок №54
(згідно робочої навчальної програми)
Тема:Каталоги і дисководи, зміна каталогів і пристроїв
Питання:
1.Визначення поточної робочої директорії
2. Визначення поточного каталогу диска
3.Визначення / встановленн поточного диска
4.Пошук файлу
