Каково различие между Массивом символов и Строкой?

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

16
задан JRC 20 November 2019 в 05:18
поделиться

8 ответов

No. Это можно сделать только с помощью динамического запроса. Мне было бы очень интересно узнать, есть ли способ.

Есть несколько примеров, когда быстрый поиск Google был найден с помощью COALESCE для создания списка столбцов. Однако я предпочитаю создавать список столбцов с помощью STUFF . Однако я нашел эту статью об использовании CTE и динамических шарниров , которые также могут быть полезны

-121--3713205-

Это должно работать (используя ту же функцию MySQL, которую вы использовали):

Review.objects.filter(venue__pk=2)
    .extra({'date_created' : "date(datetime_created)"})
    .values('date_created')
    .annotate(created_count=Count('id'))
-121--1071586-

символьный массив - это просто массив символов

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

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

11
ответ дан 30 November 2019 в 16:00
поделиться

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

0
ответ дан 30 November 2019 в 16:00
поделиться

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

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

0
ответ дан 30 November 2019 в 16:00
поделиться

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

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

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

20
ответ дан 30 November 2019 в 16:00
поделиться

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

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

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

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

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

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

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

8
ответ дан 30 November 2019 в 16:00
поделиться

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

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

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

4
ответ дан 30 November 2019 в 16:00
поделиться

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

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

2
ответ дан 30 November 2019 в 16:00
поделиться

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

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

0
ответ дан 30 November 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: