В чем разница между массивом Char и строкой? - PullRequest
16 голосов
/ 17 февраля 2010

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

Ответы [ 10 ]

19 голосов
/ 17 февраля 2010

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

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

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

11 голосов
/ 17 февраля 2010

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

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

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

7 голосов
/ 17 февраля 2010

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

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

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

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

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

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

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

4 голосов
/ 17 февраля 2010

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

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

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

2 голосов
/ 17 февраля 2010

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

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

0 голосов
/ 21 августа 2018

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

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

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

0 голосов
/ 11 октября 2013

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

0 голосов
/ 17 февраля 2010

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

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

0 голосов
/ 17 февраля 2010

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

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

0 голосов
/ 17 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...