Оволодіння функціями роботи з символами в C++ та рядками в стилі C: Повний посібник 🖋️💻

Техніка програмування в C++: робота з символами та рядками є важливою навичкою. Бібліотека `` надає зручні функції для тестування та маніпулювання символами, в той час як рядки в стилі C (рядки, що закінчуються нульовим символом) дозволяють працювати з послідовностями символів, що зберігаються в масивах. У цьому блозі ми розглянемо основні функції роботи з символами, рядки в стилі C та їх практичні застосування.

pic

Функції роботи з символами в `` 🔠

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

Функції тестування символів

Функції тестування повертають значення true або false, залежно від того, чи відповідає символ певній умові.

pic

Приклад:

#include   
#include   
using namespace std;  

int main() {  
 char c = 'A';  
 cout << "Is '" << c << "' a letter? " << (isalpha(c) ? "Yes" : "No") << endl;  
 cout << "Is '" << c << "' a digit? " << (isdigit(c) ? "Yes" : "No") << endl;  
 cout << "Is '" << c << "' uppercase? " << (isupper(c) ? "Yes" : "No") << endl;  
 return 0;  
}

Функції перетворення символів

  • tolower(c): Перетворює великі літери на малі.
  • toupper(c): Перетворює малі літери на великі.

Приклад:

#include   
#include   
using namespace std;  

int main() {  
 char c = 'G';  
 cout << "Lowercase of '" << c << "' is '" << char(tolower(c)) << "'" << endl;  
 c = 'g';  
 cout << "Uppercase of '" << c << "' is '" << char(toupper(c)) << "'" << endl;  
 return 0;  
}

Вступ до рядків в стилі C 📜

Рядки в стилі C є масивами символів, що закінчуються нульовим символом. Вони представляють текст і є основою для базової маніпуляції рядками в C++.

Основні характеристики:

Нульове завершення:

  • Спеціальний символ '\0' (нульовий символ) позначає кінець рядка в стилі C.

Зберігання:

  • Зберігаються в суміжній пам'яті як масиви символів.

Доступ:

  • Доступ до символів здійснюється за допомогою індексів масиву.

Оголошення та ініціалізація рядків в стилі C

Приклад 1: Літерали рядків

#include   
using namespace std;  

int main() {  
 const char* greeting = "Hello, World!";  
 cout << greeting << endl;  
 return 0;  
}
  • Компілятор автоматично додає нульовий символ '\0' до літерала рядка.

Приклад 2: Масив символів

#include   
using namespace std;  

int main() {  
 char name[] = {'J', 'o', 'h', 'n', '\0'}; // Явно вказано нульовий символ  
 cout << name << endl;  
 return 0;  
}

Обережно: Нульове завершення

Рядки в стилі C повинні бути завершені нульовим символом. Якщо нульовий символ відсутній, операції, такі як виведення або копіювання, можуть зчитувати сміттєві значення або викликати аварії програми.

Загальні операції з рядками в стилі C 🔧

Бібліотека `` надає функції для маніпулювання та взаємодії з рядками в стилі C.

Основні функції в ``

pic

1. Вимірювання довжини

#include   
#include   
using namespace std;  

int main() {  
 char name[] = "Alice";  
 cout << "Length of '" << name << "' is " << strlen(name) << endl;  
 return 0;  
}

2. Копіювання рядків

#include   
#include   
using namespace std;  

int main() {  
 char src[] = "C++ Programming";  
 char dest[50];  
 strcpy(dest, src); // Копіюємо src в dest  
 cout << "Source: " << src << endl;  
 cout << "Destination: " << dest << endl;  
 return 0;  
}

3.

Конкатенація рядків

#include   
#include   
using namespace std;  

int main() {  
 char str1[50] = "Hello";  
 char str2[] = " World";  
 strcat(str1, str2); // Конкатенуємо str2 до str1  
 cout << "Результат: " << str1 << endl;  
 return 0;  
}

4. Порівняння рядків

#include   
#include   
using namespace std;  

int main() {  
 char str1[] = "Apple";  
 char str2[] = "Banana";  
 int result = strcmp(str1, str2);  
 if (result == 0) {  
 cout << "Рядки рівні." << endl;  
 } else if (result < 0) {  
 cout << "'" << str1 << "' менше за '" << str2 << "'." << endl;  
 } else {  
 cout << "'" << str1 << "' більше за '" << str2 << "'." << endl;  
 }  
 return 0;  
}

Обмеження рядків в стилі C ⚠️

Фіксований розмір:

  • Масиви мають фіксований розмір, що ускладнює динамічне змінення розміру.

Ручне управління:

  • Програмісти повинні вручну керувати нульовим завершенням, що може призвести до помилок.

Небезпечні операції:

  • Функції, такі як strcpy, не перевіряють переповнення буфера, що може призвести до пошкодження пам'яті.

Відсутність гнучкості:

  • Операції, такі як конкатенація та зміна розміру, є складними в порівнянні з сучасними альтернативами, такими як std::string.

Рядки в C++: краща альтернатива 🌟

Сучасний C++ представляє клас std::string, який усуває недоліки рядків в стилі C, надаючи:

  • Динамічне управління пам'яттю.
  • Зручні члени функцій для маніпулювання.
  • Безпеку та простоту використання.

Ось швидке порівняння:

pic

Висновок 🎉

Бібліотека `та **рядки в стилі C** є основою в C++ і корисні для розуміння низькорівневого маніпулювання символами та рядками. Однак сучасні розробники C++ часто віддають перевагуstd::string` за його безпеку, гнучкість і простоту використання. Розуміння рядків в стилі C залишається важливим, особливо для системного програмування, вбудованих розробок або старих кодових баз.

Експериментуйте з наведеними прикладами, щоб зміцнити своє розуміння роботи з символами та рядками в C++. Удачі в програмуванні! 🚀

Перекладено з: Mastering C++ Character Functions and C-Style Strings: A Complete Guide 🖋️💻

Leave a Reply

Your email address will not be published. Required fields are marked *