Основи програмування на С ++ для початківців

Клас String в C ++

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

рядки застосовуються, як для внутрішніх цілей (налагодження і тестування коду), так і для вирішення спільних завдань, передачі даних клієнта, оформлення графічного інтерфейсу. Зважаючи на це слід приділити особливу увагу тому, як побудовані рядки в мові С ++, як працювати з їх базовими операції і які методи обробки об'єктів типу string швидше, або доцільніше в тій чи іншій ситуації.

Рядки в мові C ++ можуть являти собою масиви символів char – це вбудований тип, який застосовувався в С. Або екземпляри класу string, який включений в стандартну бібліотеку С ++. Варто зауважити, що при створенні об'єкта даного типу ми практично отримуємо динамічно змінюється масив, т.е. той, якому немає необхідності ставити початкові розміри, оскільки вони можуть змінюватися в процесі роботи з сутністю.

У першому випадку рядок розміщується в пам'яті, як масив. Через покажчик типуchar здійснюється доступ до неї. Даний підхід загрожує помилками і є досить складним, оскільки реалізований на низькому рівні.

об'єкти класу string полегшують роботу, через них можна отримати доступ до стандартних операцій над рядками. Вони ж входять в простір імен СТЛ (Стандартна бібліотека шаблонів)Для подальшого використання стандартних бібліотек З необхідно підключити заголовний файл:

Найпростішим прикладом використання змінної рядкового типу буде виведення її на екран. Але ускладнити завдання і спробуємо, для начала, вважати значення рядка, а після її оперувати.

методgetline() дозволяє зчитувати дані з потокуcin, а також записувати їх в змінну, яка вказується після коми.

В разі, коли необхідно ініціалізувати змінну під час її створення, слід використовувати наступний синтаксис:

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

Для отримання довжини рядка можна застосовувати два методи. Один з них size() інший довжина(). Обидва методи повертають чисельну кількість символів. Але слід зауважити, що нумерація елементів в строковому масиві все одно починається з 0.

Лістинг для перевірки:

Далі ми бачимо, що обидва методи повертають однакові значення.

робота з рядками в C ++, клас Рядок C ++, методи length() і розмір()

Для перевірки строкової змінної на наявність даних в ній використовується функція empty(), яка повертає логічне значення ( 0 если false или 1 если true). Дана операція корисна, коли необхідно себе убезпечити від втрати даних.

Щоб обнулити малу змінну застосовується методясно(). В результаті після його виконання myString.size() вернет 0, аmyString.empty() – значение true, т.е. 1.
Лістинг коду для перевірки функцій:

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

Функцияpush_back (char) дозволяє додати в кінець поточного рядка будь-який символ типу char. При этом, нам немає необхідності пересохранять нове значення рядка, стару змінну просто буде модифікованої.

клас string дозволяє маніпулювати двома рядками одночасно, записуючи значення з однієї в іншу. Для цього на об'єкті рядки слід викликати методвставити (INT startInResultString, рядок з, INT startInSourceString, int amount). деstartInResultString – стартова позиція осередки в рядку, в яку проводиться запис нових даних, т.е. нові значення будуть розміщуватися починаючи з цього індексу.

рядкова зміннавід – являє собою рядок з якої беруться дані, далі всі параметри відносяться саме до неї. Початкове значення індексу з якого почнеться копіювання даних позначеноstartInSourceString. Загальна кількість символів, які будуть скопійовані з рядкавідпозначеноamount, відлік проводиться починаючи зі стартового індексу.

Лістинг коду дозволить краще розібратися зі вхідними параметрами функції.

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

експериментуйте – створіть об'єкт класу string і викликайте його методи по-черзі. Намагайтеся самі розібратися, що вони роблять і як працюють. У багатьох підручниках пропонується самостійно написати свій власний (звичайно ж приборканий) класс для роботи з рядками. Це зовсім нескладно і ви відмінно розберетеся з тим, як влаштований справжній клас string. Ми підготуємо для вас кілька завдань, для закріплення цього матеріалу.

Обов'язково подивіться відео по темі клас (автор Денис Марков):

Відео про те як створити свій клас String допоможе розібратися, як все влаштовано:

7 думки про "Клас String в C ++

  1. гарна стаття, може краща у всьому циклі статей – по збалансованості детальності і простоті викладу.

    тільки незрозуміло, чому всюди в тексті клас називається String (з великої букви), якщо навіть в прикладах він скрізь використовується як string (з маленької букви). Якщо ви напишете String в коді, то тут же отримаєте грубу синтаксичну помилку.

  2. Ще добре б згадати, хоча б побіжно (або окремою темою в продовження, “використання string”?):

    1. що з string завжди можна “Вилучити” більш звичне уявлення char * (в стилі C) c_str методом():
    покажчик на рядок = “ххх”;
    символ * з = s.c_str();

    2. про перевизначених операціях + = і + для string, як конкатенація рядків:
    Рядок ч = “Здравствуйте “, ш = “світ”;
    cout << годину + вага << endl;
    ч + = ш;
    cout << годину << endl;

    3. про цілої великої групи методів-уявлення рядків для зображення числових значень:
    рядок d( "123" ), f( "1.23" );
    довго я = d.stoul();
    пливуть г = d.stof();

  3. І останнє … зауваження:
    > Обидва методи повертають чисельну кількість символів.

    довжина() і розмір() повертають не кількість символів, а кількість байт у вмісті рядка. для ASCII (англійських) символов – це одне і теж. Але для російських (та інших мов) – нет, і залежить від використовуваного кодування.

    string priv( "привет!" );
    cout << priv.size( ) << " | " << priv.length( );
    , в залежності від того, в якому редакторі і якому кодуванні працюєте з кодом програми.

    Точні значення тут не важливі… Але важливо знати, що length() і розмір() для російських рядків не дають передбачуване число символів, що може породжувати важко знаходять помилки!

  4. … з'їла, гидоту, кілька рядків прикладу!
    Але має бути зрозуміло, що довжина “вітання!” буде дорівнює 13.

  5. #include
    #include
    using namespace std;

    int main()
    {
    рядок туЗЬптд; // створюємо змінну, в яку помістимо рядок

    cout << "What is your name? ";
    getline(cin, MyString); // зчитуємо введений рядок

    cout << "Hey, " << MyString << "! \n"; // виводимо значення змінної на екран
    }
    У мене чомусь getline(cin, MyString); НЕ делать

    1. перепрошую, що не в

Залишити коментар до Olej Скасувати відповідь

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *