std::string клас у C++

C++ містить у своєму визначенні спосіб представлення a послідовність символів як об'єкт класу . Цей клас називається std::string. Клас string зберігає символи як послідовність байтів із функціональністю дозволу доступ до однобайтового символу .

Рядок проти масиву символів

Рядок

Масив символів

 Рядок - це a клас, який визначає об'єкти які будуть представлені як потік символів. Масив символів - це просто масив символів який може закінчуватися нульовим символом.
У випадку рядків пам'ять є розподіляється динамічно . На вимогу під час виконання можна виділити більше пам’яті. Оскільки пам’ять попередньо не виділена пам'ять не витрачається . Розмір масиву символів має бути виділені статично більше пам'яті не може бути виділено під час виконання, якщо потрібно. Невикористані виділені пам'ять також витрачається
Оскільки рядки представлені як об’єкти відсутність розпаду масиву відбувається. Є загроза розпад масиву у випадку масиву символів. 
Струни повільніші у порівнянні з реалізацією, ніж масив символів. Реалізація масив символів працює швидше ніж std:: string. 
Клас String визначає ряд функціональних можливостей які дозволяють різноманітні операції над рядками. Масиви символів не пропонувати багато вбудовані функції маніпулювати рядками.

Операції над рядками

1) Функції введення

функція Визначення
getline() Ця функція використовується для збереження потоку символів, які вводить користувач у пам’ять об’єкта.
push_back() Ця функція використовується для введення символу в кінці рядка.
pop_back() Запроваджена з C++11 (для рядків), ця функція використовується для видалення останнього символу з рядка. 

приклад:

CPP
   // C++ Program to demonstrate the working of   // getline() push_back() and pop_back()   #include          #include         // for string class   using     namespace     std  ;   // Driver Code   int     main  ()   {      // Declaring string      string     str  ;      // Taking string input using getline()      getline  (  cin       str  );      // Displaying string      cout      < <     'The initial string is : '  ;      cout      < <     str      < <     endl  ;      // Inserting a character      str  .  push_back  (  's'  );      // Displaying string      cout      < <     'The string after push_back operation is : '  ;      cout      < <     str      < <     endl  ;      // Deleting a character      str  .  pop_back  ();      // Displaying string      cout      < <     'The string after pop_back operation is : '  ;      cout      < <     str      < <     endl  ;      return     0  ;   }   

Вихід
The initial string is : The string after push_back operation is : s The string after pop_back operation is :  

Часова складність: O(1)

Просторова складність: O(n) де n - розмір рядка

2) Функції ємності

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

приклад:

CPP
   // C++ Program to demonstrate the working of   // capacity() resize() and shrink_to_fit()   #include          #include         // for string class   using     namespace     std  ;   // Driver Code   int     main  ()   {      // Initializing string      string     str     =     'geeksforgeeks is for geeks'  ;      // Displaying string      cout      < <     'The initial string is : '  ;      cout      < <     str      < <     endl  ;      // Resizing string using resize()      str  .  resize  (  13  );      // Displaying string      cout      < <     'The string after resize operation is : '  ;      cout      < <     str      < <     endl  ;      // Displaying capacity of string      cout      < <     'The capacity of string is : '  ;      cout      < <     str  .  capacity  ()      < <     endl  ;      // Displaying length of the string      cout      < <     'The length of the string is :'      < <     str  .  length  ()       < <     endl  ;      // Decreasing the capacity of string      // using shrink_to_fit()      str  .  shrink_to_fit  ();      // Displaying string      cout      < <     'The new capacity after shrinking is : '  ;      cout      < <     str  .  capacity  ()      < <     endl  ;      return     0  ;   }   

Вихід
The initial string is : geeksforgeeks is for geeks The string after resize operation is : geeksforgeeks The capacity of string is : 26 The length of the string is :13 The new capacity after shrinking is : 13 

Часова складність: O(1)

Просторова складність: O(n) де n - розмір рядка

3) Функції ітератора

функція Визначення
почати() Ця функція повертає ітератор на початок рядка.
кінець() Ця функція повертає ітератор до наступного кінця рядка.
rbegin() Ця функція повертає зворотний ітератор, що вказує на кінець рядка.
render() Ця функція повертає зворотний ітератор, що вказує на попередній початок рядка.
cbegin() Ця функція повертає постійний ітератор, що вказує на початок рядка, його не можна використовувати для зміни вмісту, на який він вказує.
декілька() Ця функція повертає постійний ітератор, що вказує на наступний кінець рядка, його не можна використовувати для зміни вмісту, на який він вказує.
crbegin() Ця функція повертає постійний зворотний ітератор, що вказує на кінець рядка, його не можна використовувати для зміни вмісту, на який він вказує.
crend() Ця функція повертає постійний зворотний ітератор, що вказує на попередній або початок рядка, його не можна використовувати для зміни вмісту, на який він вказує.

Алгоритм:

  1. Оголошення рядка
  2. Спробуйте повторити рядок, використовуючи всі типи ітераторів
  3. Спробуйте змінити елемент рядка.
  4. Відобразити всі ітерації.

приклад:

CPP
   // C++ Program to demonstrate the working of   // begin() end() rbegin() rend() cbegin() cend() crbegin() crend()   #include          #include         // for string class   using     namespace     std  ;   // Driver Code   int     main  ()   {      // Initializing string`      string     str     =     'geeksforgeeks'  ;      // Declaring iterator      std  ::  string  ::  iterator     it  ;      // Declaring reverse iterator      std  ::  string  ::  reverse_iterator     it1  ;      cout   < <  'Str:'   < <  str   < <  '  n  '  ;      // Displaying string      cout      < <     'The string using forward iterators is : '  ;      for     (  it     =     str  .  begin  ();     it     !=     str  .  end  ();     it  ++  ){      if  (  it     ==     str  .  begin  ())     *  it  =  'G'  ;      cout      < <     *  it  ;      }      cout      < <     endl  ;      str     =     'geeksforgeeks'  ;      // Displaying reverse string      cout      < <     'The reverse string using reverse iterators is '      ': '  ;      for     (  it1     =     str  .  rbegin  ();     it1     !=     str  .  rend  ();     it1  ++  ){      if  (  it1     ==     str  .  rbegin  ())     *  it1  =  'S'  ;      cout      < <     *  it1  ;      }      cout      < <     endl  ;          str     =     'geeksforgeeks'  ;      //Displaying String      cout   < <  'The string using constant forward iterator is :'  ;      for  (  auto     it2     =     str  .  cbegin  ();     it2  !=  str  .  cend  ();     it2  ++  ){      //if(it2 == str.cbegin()) *it2='G';      //here modification is NOT Possible      //error: assignment of read-only location       //As it is a pointer to the const content but we can inc/dec-rement the iterator      cout   < <*  it2  ;      }      cout   < <  '  n  '  ;          str     =     'geeksforgeeks'  ;      //Displaying String in reverse      cout   < <  'The reverse string using constant reverse iterator is :'  ;      for  (  auto     it3     =     str  .  crbegin  ();     it3  !=  str  .  crend  ();     it3  ++  ){      //if(it2 == str.cbegin()) *it2='S';      //here modification is NOT Possible      //error: assignment of read-only location       //As it is a pointer to the const content but we can inc/dec-rement the iterator      cout   < <*  it3  ;      }      cout   < <  '  n  '  ;      return     0  ;   }   //Code modified by Balakrishnan R (rbkraj000)   

Вихід
Str:geeksforgeeks The string using forward iterators is : Geeksforgeeks The reverse string using reverse iterators is : Skeegrofskeeg The string using constant forward iterator is :geeksforgeeks The reverse string using constant reverse iterator is :skeegrofskeeg 

Часова складність: O(1)

Просторова складність: O(n) де n - розмір рядка

4) Маніпуляційні функції:

функція Визначення
copy('char array' len pos)  Ця функція копіює підрядок у цільовому масиві символів, згаданому в її аргументах. Для копіювання потрібні 3 аргументи: довжина цільового масиву символів і початкова позиція в рядку.
своп() Ця функція замінює один рядок іншим

приклад:

CPP
   // C++ Program to demonstrate the working of   // copy() and swap()   #include          #include         // for string class   using     namespace     std  ;   // Driver Code   int     main  ()   {      // Initializing 1st string      string     str1     =     'geeksforgeeks is for geeks'  ;      // Declaring 2nd string      string     str2     =     'geeksforgeeks rocks'  ;      // Declaring character array      char     ch  [  80  ];      // using copy() to copy elements into char array      // copies 'geeksforgeeks'      str1  .  copy  (  ch       13       0  );      // Displaying char array      cout      < <     'The new copied character array is : '  ;      cout      < <     ch      < <     endl  ;      // Displaying strings before swapping      cout      < <     'The 1st string before swapping is : '  ;      cout      < <     str1      < <     endl  ;      cout      < <     'The 2nd string before swapping is : '  ;      cout      < <     str2      < <     endl  ;      // using swap() to swap string content      str1  .  swap  (  str2  );      // Displaying strings after swapping      cout      < <     'The 1st string after swapping is : '  ;      cout      < <     str1      < <     endl  ;      cout      < <     'The 2nd string after swapping is : '  ;      cout      < <     str2      < <     endl  ;      return     0  ;   }   

Вихід
The new copied character array is : geeksforgeeks The 1st string before swapping is : geeksforgeeks is for geeks The 2nd string before swapping is : geeksforgeeks rocks The 1st string after swapping is : geeksforgeeks rocks The 2nd string after swapping is : geeksforgeeks is for geeks 


Необхідно прочитати: C++ String Class та його застосування