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

Автор: Laura McKinney
Дата Створення: 1 Квітень 2021
Дата Оновлення: 6 Травень 2024
Anonim
Динамический массив с++ пример. Создание, заполнение, удаление, размер динамического массива. #55
Відеоролик: Динамический массив с++ пример. Создание, заполнение, удаление, размер динамического массива. #55

Зміст


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

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

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


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


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

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

назва char = {A, j, a, y, 0}; або char name = "Аджай";

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

Кінець рядка завжди є нульовим символом; це завершальний характер масиву символів. Масив символів не є вбудованим типом даних; ми створюємо масив символів, оголошуючи його. Не можна застосовувати стандартні оператори до масиву символів. Для роботи з символьним масивом є деякі вбудовані функції, такі як (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". Як і в C ++, створення класу подібно до створення типу. Клас "string" є частиною бібліотеки C ++. Він містить набір символів або символьних масивів в цілому. За розробкою стандартного рядкового класу є три причини.

  • Спочатку "послідовність", масиви символів самі по собі не є типом даних.
  • Друге "зручність", ви не можете використовувати стандартні оператори в масиві символів.
  • Третя "безпека", межі масиву легко долаються.

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

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

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

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

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

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

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

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

Висновок:

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