Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

Строка - это символьный массив, завершенный нулевым символом '\ 0