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

Выбор редакции

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

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

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

Основа для сравненияМассив символовстрока
основнойСимвольный массив представляет собой набор переменных, символьного типа данных.Строка - это класс, а переменные строки - это объект класса «строка».
Синтаксисchar array_name [size];строка string_name;
индексированиеОтдельный символ в символьном массиве может быть доступен по его индексу в массиве.В строке к определенному символу может обращаться функция «string_name.charAt (index)».
Тип данныхМассив символов не определяет тип данных.Строка определяет тип данных в C ++.
операторыОператоры в C ++ не могут быть применены к массиву символов.Вы можете применить стандартный оператор C ++ к строке.
граничныйГраницы массива легко перекрываются.Границы не пройдут.
ДоступБыстрый доступ.Медленный доступ.


Определение массива символов

Символьный массив представляет собой набор переменных типа «char»; это может быть одномерный массив или двумерный массив. Это также называется «строка с нулевым символом в конце». Символьный массив - это последовательность символов, которые хранятся в последовательных адресах памяти. В массиве символов к определенному символу можно получить доступ по его индексу. «Нулевой символ» завершает массив символов ».

Давайте рассмотрим пример массива символов:

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

Здесь «char» - это символьный тип данных, «name» - это имя переменной массива символов. Я показал два способа инициализации массива символов. В первом методе явно упоминается ноль, а во втором методе компилятор автоматически вставляет ноль.

Конец строки всегда является нулевым символом; это завершающий символ массива символов. Массив символов не является встроенным типом данных; мы создаем массив символов, объявив его. Вы не можете применять стандартные операторы к массиву символов. Для работы с массивом символов есть несколько встроенных функций, таких как (strlen (), strlwr (), strupr (), strcat ()). Поскольку стандартные операторы не могут быть применены к массиву символов, они не могут принимать участие ни в одном выражении.

Символьный указатель на символьный массив также может быть создан.

Давайте разберемся с этим на примере.

 char s1 [] = "Привет"; char s2 [] = "Сэр"; s1 = s1 + s2; // операторы ошибок не могут быть применены s2 = s1; // ошибка указателя символа char * s = "Morning"; char * p; P = S; // исполняет 

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

Помните, что после инициализации массива символов его нельзя снова инициализировать другим набором символов. Доступ к массиву символов или строке с нулевым символом в конце быстрый по сравнению со строкой в ​​C ++.

Определение строки

Строка не является встроенным типом данных C ++. Это объект класса типа «строка». Как и в C ++, создание класса похоже на создание «типа». Класс «string» является частью библиотеки C ++. Он содержит набор символов или массив символов в целом. Существует три причины, по которым стоит разработка стандартного класса строк.

  • Во-первых, это «согласованность», массивы символов сами по себе не являются типами данных.
  • Второе - это «удобство», вы не можете использовать стандартные операторы в массиве символов.
  • В-третьих, «безопасность», границы массивов легко выходят за рамки.

Давайте разберемся со строками на примере.

 строка s1; s1 = "Привет"; строка s2 («Доброе утро»); строка s3 = "Hennery"; строка s4; 

В приведенном выше объявлении объявлены четыре строковые переменные или объекты (s1, s2, s3, s4). В приведенном выше объявлении я показал три способа инициализации строки. Строка s1 объявляется и затем отдельно инициализируется. Строка s2 инициализируется конструктором класса «String». Строка s3 инициализируется во время ее объявления как обычный тип данных. Мы можем применить стандартный оператор к строковым переменным.

 s4 = s1; // присвоение одного строкового объекта другому s4 = s1 + s2; // добавляем две строки и сохраняем результат в третьей строке if (s3> s2) // сравниваем две строки strings s5 (s1); создание нового строкового объекта с использованием существующего строкового объекта 

В приведенном выше коде различные операторы применяются к строке и выполняются различные операции. Первый оператор копирует один строковый объект в другой строковый объект. Во втором операторе две строки объединяются и сохраняются в третьей строке. В третьем утверждении сравниваются две строки. В четвертом операторе новый строковый объект создается с использованием уже существующего строкового объекта.

Доступ к строке медленный по сравнению с массивом символов или строкой с нулевым символом в конце.

Ключевые различия между массивом символов и строкой

  1. Символьный массив - это набор переменных, имеющих тип символов. String - это класс, который создается для объявления строк.
  2. Используя значение индекса, вы можете получить доступ к символу из массива символов. С другой стороны, если вы хотите получить доступ к определенному символу в строке, вы можете получить к нему доступ с помощью функции string's_name.charAt (index).
  3. Поскольку массив не является типом данных, символ также не является типом данных. С другой стороны, String, являющийся классом, действует как ссылочный тип, следовательно, можно сказать, что String является типом данных.
  4. Вы не можете применять операторы к массиву символов, тогда как вы можете применять операторы к строке.
  5. Будучи массивом, массив символов имеет фиксированную длину, и его границы могут быть легко расширены. Где String не имеет границ.
  6. Элементы массива хранятся в смежной области памяти, поэтому к ним можно получить доступ быстрее, чем строковую переменную.

Заключение:

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

Top