Препоръчано, 2024

Избор На Редактора

Разлика между масив от символи и низ

C ++ поддържа както Character array, така и string, тъй като C ++ има значителни ползи при използването им. Но невъзможността да се работи с масив от символи повдига развитието на низ от класове. И двата символен масив и низ съдържат последователността от символи. Но фундаменталната разлика между символния масив и низ е, че „символният масив” не може да се управлява със стандартни оператори, докато „струнните” обекти могат да се управляват със стандартни оператори. Нека проучим другите разлики между символен масив и низ.

Сравнителна таблица

Основа за сравнениеМасив от символиниз
ОсновенСимволният масив е колекция от променливи, от тип данни за символи.String е клас и променливите на string са обект на класа "string".
Синтаксисchar array_name [размер];string string_name;
ИндексиранетоИндивидуален знак в масив от знаци може да бъде достъпен чрез неговия индекс в масив.В низа конкретният символ може да бъде достъпен чрез функцията "string_name.charAt (index)".
Тип данниСимволният масив не дефинира тип данни.Даден низ определя тип данни в C ++.
ОператоритеОператорите в C ++ не могат да се прилагат за масив от символи.Можете да приложите стандартен C ++ оператор на низ.
границаГраниците на масивите лесно се превишават.Границите няма да бъдат превишени.
достъпБърз достъп.Бавен достъп.


Дефиниция на масив от символи

Символният масив е колекция от променливи от тип “char”; тя може да бъде едномерен масив или двуизмерен масив. Тя се нарича също „низа, завършваща с нула“. Символният масив е поредица от символи, които се съхраняват в последователни адреси на паметта. В символен масив може да бъде достъпен определен символ чрез неговия индекс. "Нулев знак" завършва символния масив ".

Да вземем пример за масив от знаци: -

 char име [] = {'A', 'j', 'a', 'y', '0'}; или char name [] = "Ajay"; 

Тук “char” е тип символни данни, “name” е име на променлива на символния масив. Бях показал два начина за инициализиране на символния масив. При първия метод null се споменава изрично и във втория метод компилаторът автоматично вмъква null.

Краят на низа винаги е нулев характер; това е символът, завършващ с символния масив. Символният масив не е вграден тип данни; създаваме символен масив, като го декларираме. Не можете да приложите стандартни оператори за символен масив. За да работи с масив от символи има някои вградени функции като, (strlen (), strlwr (), strupr (), strcat ()). Тъй като стандартните оператори не могат да бъдат приложени към масив от символи, те не могат да участват във всеки израз.

Също така може да се създаде указател на знака към символен масив.

Нека го разберем с един пример.

 char s1 [] = "Здравейте"; char s2 [] = "Сър"; s1 = s1 + s2; // операторите на грешки не могат да се прилагат s2 = s1; // грешка Character pointer char * s = "Сутрин"; char * p; р = S; // изпълнява 

В горния пример бяхме обявили два знакови масива s1, s2 и два символни указателя s и p. Символният масив s1 и s2 се инициализира, можем да видим, че нито операторът на добавяне (+), нито операторът на присвояване работят върху символния масив. Но указател на символи може да бъде присвоен на друг показалец.

Не забравяйте, че след като инициализирането на символния масив не може да се инициализира отново към друг набор от символи. Достъпът до символен масив или нула, завършваща с низ, е бърз в сравнение със низ в C ++.

Дефиниция на String

Даден низ не е вграден тип данни на C ++. Това е клас обект от тип “string”. Както и в C ++ създаването на клас е точно като създаване на тип. Класът "string" е част от C ++ библиотеката. Той съдържа набор от символи или масив от символи като цяло. Съществуват три причини за разработването на стандартен клас низ.

  • Първо е “последователност”, символните масиви не са типове данни сами по себе си.
  • Второто е “удобство”, не можете да използвате стандартни оператори на символен масив.
  • Трето е "безопасността", границите на масивите лесно се превишават.

Нека разберем низовете с един пример.

 string s1; s1 = "Здравейте"; низ s2 ("Добро утро"); низ s3 = "Hennery"; string 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 (index).
  3. Тъй като масивът не е тип данни, по същия начин знак също не е тип данни. От друга страна, String е клас, който действа като референтен тип, следователно може да се каже, че String е тип данни.
  4. Не можете да приложите нито един оператор на символен масив, докато, можете да приложите оператори на String.
  5. Да бъдеш масив от символни масиви има фиксирана дължина и границите му могат лесно да бъдат превишени. Където String няма граници.
  6. Елементите на масива се съхраняват в непрекъснато място на паметта, така че може да бъде достъпен по-бързо от променливата низ.

Заключение:

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

Top