Рекомендуємо, 2024

Вибір Редакції

Різниця між масивом символів і рядком

C ++ підтримує як масив символів, так і рядки, оскільки C ++ має значні переваги в їх використанні. Але, нездатність працювати на масиві символів піднімає розробку класу string. Масив символів і рядок містять послідовність символів. Але принципова відмінність між символьним масивом і рядком полягає в тому, що «масив символів» не може працювати зі стандартними операторами, тоді як «рядкові» об'єкти можуть працювати зі стандартними операторами. Давайте вивчимо інші відмінності між символьним масивом і рядком.

Діаграма порівняння

Основа для порівнянняМасив символівРядок
ОсновнийСимвольний масив - це набір змінних символьного типу даних.Рядок - це клас і змінні рядка є об'єктом класу "string".
Синтаксисchar array_name [розмір];string string_name;
ІндексаціяІндивідуальний символ у масиві символів може бути доступний за його індексом у масиві.У рядок до конкретного символу можна звертатися за допомогою функції "string_name.charAt (index)".
Тип данихМасив символів не визначає тип даних.Рядок визначає тип даних у C ++.
ОператориОператори в C ++ не можуть бути застосовані до масиву символів.Ви можете застосувати стандартний оператор C ++ до рядка.
ГраницяМежі масиву легко переповнюються.Межі не перевищуватимуть.
ДоступШвидкий доступ.Повільний доступ.


Визначення масиву символів

Символьний масив - це сукупність змінних типу даних “char”; це може бути одновимірний масив або двовимірний масив. Вона також називається "рядком з нульовим завершенням". Символьний масив - це послідовність символів, що зберігаються в послідовних адресах пам'яті. У масиві символів до певного символу можна отримати доступ за його покажчиком. "Нульовий символ" закінчує символьний масив ".

Візьмемо приклад масиву символів: -

 char name [] = {'A', 'j', 'a', 'y', '\ t або char name [] = "Ajay"; 

Тут, "char" є символьним типом даних, "name" - це ім'я змінної масиву символів. Я показав два способи ініціалізації масиву символів. У першому методі, null явно згадується і у другому методі компілятор автоматично вставляє null.

Кінець рядка завжди має нульовий характер; це закінчуючий символ масиву символів. Символьний масив не є вбудованим типом даних; ми створюємо масив символів, оголошуючи його. Не можна застосовувати стандартні оператори до символьного масиву. Для роботи з масивом символів є деякі вбудовані функції, такі як, (strlen (), strlwr (), strupr (), strcat ()). Оскільки стандартні оператори не можуть бути застосовані до масиву символів, вони не можуть брати участь у будь-якому вираженні.

Також можна створити покажчик символу на масив символів.

Розберемося з прикладом.

 char s1 [] = "Привіт"; char s2 [] = "Сер"; s1 = s1 + s2; // оператори помилок не можуть бути застосовані s2 = s1; // помилка вказівника символу char * s = "Ранок"; char * p; p = s; // виконує 

У наведеному вище прикладі ми оголосили два масиви символів s1, s2 і два символи покажчиків s і p. Масив символів s1 і s2 ініціалізуються, ми бачимо, що ні оператор додавання (+), ні оператор присвоювання не працюють на масиві символів. Але покажчик символів може бути призначений іншому покажчику символів.

Пам'ятайте, як тільки ініціалізується масив символів, він не може бути знову ініціалізований іншим набором символів. Доступ до масиву символів або рядка з нульовим завершенням швидко порівнюється з рядком у C ++.

Визначення рядка

Рядок не є вбудованим типом даних C ++. Це клас об'єкта типу “string”. Як і в С ++, створення класу подібне до створення типу «тип». Клас "string" є частиною бібліотеки C ++. Вона містить набір символів або символів у цілому. Є три причини розвитку стандартного класу рядків.

  • По-перше, це «узгодженість», символьні масиви не є власними типами даних.
  • По-друге, це «зручність», не можна використовувати стандартні оператори на масиві символів.
  • По-третє, «безпека», межі масиву легко перевищуються.

Давайте зрозуміємо рядки з прикладом.

 string s1; s1 = "Привіт"; рядок s2 ("Доброго ранку"); рядок s3 = "Hennery"; рядок s4; 

У наведеному вище оголошенні оголошуються чотири рядкові змінні або об'єкти (s1, s2, s3, s4). У вищезгаданій декларації я показав три способи ініціалізації рядка. Рядок s1 оголошується і потім окремо ініціалізується. Рядок s2 ініціалізується конструктором класу "String". Рядок s3 ініціалізується під час його оголошення як звичайний тип даних. Ми можемо застосувати стандартний оператор до рядкових змінних.

 s4 = s1; // привласнення одного рядкового об'єкта іншим s4 = s1 + s2; // додавання двох рядків і збереження результату в третій рядок, якщо (s3> s2) // порівняння двох рядків рядків s5 (s1); створення нового рядкового об'єкта з використанням існуючого рядкового об'єкта 

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

Доступ до рядка є повільним порівняно з масивом символів або нульовим рядком.

Ключові відмінності між масивом символів і рядком

  1. Символьний масив - це сукупність змінних, які мають тип даних символів. Рядок - це клас, який створюється для оголошення рядків.
  2. За допомогою значення індексу можна отримати доступ до символу з масиву символів. З іншого боку, якщо ви хочете отримати доступ до певного символу у рядку, ви можете отримати доступ до нього за допомогою функції string's_name.charAt (index).
  3. Оскільки масив не є типом даних, символ також не є типом даних. З іншого боку, String, будучи класом, виступає як тип посилання, отже, можна сказати, що String є типом даних.
  4. Не можна застосовувати будь-який оператор до масиву символів, тоді як оператори можна застосувати до String.
  5. Будучи масивом символів масив має фіксовану довжину і його межі можуть бути легко переповнені. Де String не має ніяких кордонів.
  6. Елементи масиву зберігаються в безперервному місці пам'яті, тому до них можна звертатися швидше, ніж строкова змінна.

Висновок:

Нездатність працювати на символьному масиві підняла розробку стандартного класу рядків.

Top