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

StackOverflow https://stackoverflow.com/questions/2283900

  •  21-09-2019
  •  | 
  •  

Вопрос

Проводя свое время за изучением языков высокого уровня, мне вдруг пришло в голову, что я не знаю разницы между массивом символов и строкой.Я думаю, что это одно и то же, но не уверен.Есть ли разница?Это просто массив символов с некоторой абстракцией?

Это было полезно?

Решение

массив символов - это просто массив символов

строка - это структура данных, которая использует массив символов

некоторые строковые представления используют нулевой ограничитель (например, C), другие используют префикс длины

Другие советы

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

В таком языке, как C, разница очень невелика - просто строка c представляет собой последовательность символов с нулевым завершением по последовательным адресам, доступ к которым обычно осуществляется через указатель.

На языке ООП строка будет объектом некоторого класса String.Вероятно, это приведет к внутреннему хранению данных в массиве символов, но вам не обязательно это знать.Массив символов может быть только простым массивом, но класс String может предоставлять множество операций (подстроки, регулярные выражения и т.д.) над строками, если разработчик решит.

Раньше я преподавал программирование, и вот как я обычно объяснял эту конкретную проблему.

Во-первых, сосредоточьтесь на том, что есть у обеих вещей в общем:как массив char, так и строка состоят из последовательности символов.Будучи последовательность подразумевает, что символы упорядочены и что их можно перечислять, например.

Теперь сосредоточьтесь на том, что добавляет каждая из двух вещей, в их конкретном другой пути, к этой общей почве.

A массив символов добавляет то, что, как известно, добавляет любой массив:индексация и произвольный доступ к отдельным элементам.

A строка, с другой стороны, добавляет тот факт, что последовательность символов рассматривается как единое целое со своими собственными свойствами.В некоторых реализациях достижение этого означает изменение способа хранения символов (например, добавление завершающего значения null в строки C).

Такой подход (посмотрите на общие черты, а затем на то, как вещи отличаются от них) оказался полезным в самых разных ситуациях.

Надеюсь, это поможет.

В C это почти одно и то же, хотя строка будет содержать дополнительный нулевой символ в конце.

В других языках (Java, C # и т.д.) строка - это объект, тогда как массив символов - это массив ...символы (которые являются примитивными типами данных).

Обычно строки реализуются с помощью символьных массивов.

Ответ в какой-то степени зависит от того, на каком языке вы говорите.В мире .Net / C # строки являются неизменяемыми объектами, тогда как в массиве char вы можете легко добавлять / изменять значения в массиве.Строки могут обрабатываться как массивы символов, доступные только для чтения, поскольку вы можете перебирать символы в строке.

Абстрактно я думаю, что самая большая разница заключается в том, как вы хотите с ними работать.Вы хотите поработать с фрагментом текста, скажем, показать сообщение конечному пользователю, или вы просматриваете последовательность символов, выполняя некоторую обработку списка?На определенном уровне все это довольно субъективно.

String является class на языке Java.Таким образом, у него есть атрибуты, например length.Поэтому, когда вы запрашиваете размер строки, он просто возвращает это вместо того, чтобы вычислять значение каждый раз.Это также другие методы, например indexOf, substring, и т.д., чтобы облегчить жизнь, чтобы вам не пришлось делать это самому.

Строка в стиле C внутренне представлена массивом символов с '\0' в конце, который указывает на конец строки.

В C ++ существует класс string container, определенный в string.h, который предоставляет некоторые типичные строковые операции для манипулирования строкой.

Это зависит от языка.В языках C-ish они в значительной степени синонимичны.Вы могли бы утверждать, что разница в том, что "строки" имеют неявный завершающий nul , но это было бы непросто.

Фортран - это другая крайность.Там символьные массивы и символьные строки совершенно разных типов, с различными операциями, доступными для них.

Строка - это массив символов, заканчивающийся нулевым символом ‘\0’

В C строка представляет собой массив символов, заканчивающийся нулевым символом (\0), но

В C ++ строка - это класс, и мы используем его объект, и в конце нет нулевого символа но массив символов содержит нулевой символ в конце.

Кроме того, мы можем использовать операторы со строковым объектом в C ++.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top