Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samostoyatelnye_po_S.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
671.74 Кб
Скачать

Функції для роботи з рядками

Існують два варіанти роботи з текстовою інформацією. Перший це скористатися С рядками - масивами символів, завершується нульовим символом. Для роботи з ними в стандартну бібліотеку входять наступні оптимізовані функції:

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.Пошук файлу

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]