#data-structures
#структуры данных
Вопрос:
Я решал проблему ниже, читая ее решение в первой строке, которую я прочитал, может кто-нибудь помочь мне в объяснении предположим, что набор символов равен ASCII ** Мне не нужно никакого другого решения этой проблемы, я просто хочу понять утверждение **
Реализуйте алгоритм для определения, содержит ли строка все уникальные символы. Что делать, если вы не можете использовать дополнительные структуры данных
Заранее спасибо за помощь.
Комментарии:
Ответ №1:
Там нет текста, кроме закодированного текста.
Текст — это последовательность «символов», членов набора символов. Набор символов представляет собой взаимно однозначное сопоставление условного символа с неотрицательным целым числом, называемое кодовой точкой.
Кодирование — это сопоставление между кодовой точкой и последовательностью байтов.
Примеры:
- ASCII, 128 кодовых точек, одна кодировка
- OEM437, 256 кодовых точек, одна кодировка
- Windows-1252, 251 кодовая точка, одна кодировка
- ISO-8859-1, 256 кодовых точек, одна кодировка
- Юникод, 1 114 112 кодовых точек, множество кодировок: UTF-8, UTF-16, UTF-32,…
Когда вы получаете поток байтов или читаете файл, представляющий текст, вы должны знать набор символов и кодировку.И наоборот, когда вы отправляете поток байтов или записываете файл, представляющий текст, вы сообщаете получателю набор символов и кодировку. В противном случае у вас сбой связи.
Примечание: исходный код программы почти всегда представляет собой текстовые файлы. Итак, это требование связи также применяется между вами, вашим редактором / IDE и вашим компилятором.
Примечание: ввод и вывод программной консоли представляют собой текстовые потоки. Итак, это требование связи также применяется между программой, ее библиотеками и вашей консолью (оболочкой). Перейдите locale
или chcp
, чтобы узнать, что это за кодировка.
Многие наборы символов являются надмножеством ASCII, а некоторые кодировки отображают одни и те же символы с одинаковыми последовательностями байтов. Это вызывает много путаницы, ограничивает обучение, способствует использованию плохой терминологии, а частичная совместимость приводит к ошибкам в коде. Продуманный подход к спецификациям и кодированию устраняет это.
Примеры:
- Некоторые люди говорят «ASCII», когда имеют в виду общее подмножество символов между ASCII и набором символов, который они фактически используют. В Юникоде и в других местах это называется элементами управления C0 и базовой латиницей.
- Некоторые люди говорят «Код ASCII», когда они просто означают кодовую точку или кодированные байты кодовой точки (или единицы кода).
Контекст вашего вопроса неясен, но в заявлении делается попытка сказать, что отдельные символы в ваших данных находятся в наборе символов ASCII, и поэтому их число меньше или равно 128. Из-за сходства между наборами символов вы можете предположить, что диапазон кодовых точек, о котором вам нужно беспокоиться, составляет от 0 до 127. (Добавляйте комментарии, утверждения или исключения, если это применимо, в свой код, чтобы сделать это понятным для читателей и обеспечить некоторую проверку во время выполнения.)
Что это означает на вашем языке программирования, зависит от языка программирования и его библиотек. Многие современные языки программирования используют UTF-16 для представления строк и UTF-8 для потоков и файлов. Программы часто создаются со стандартными библиотеками, которые учитывают кодировку консоли (фактическую или предполагаемую) при чтении или записи с консоли.
Итак, если ваши данные поступают из файла, вы должны прочитать его, используя правильную кодировку. Если ваши данные поступают с консоли, стандартные библиотеки вашей программы, возможно, изменят кодировки с кодировки консоли на кодировку собственных символьных и строковых типов данных языка или стандартной библиотеки. Если ваши данные поступают из файла исходного кода, вы должны сохранить их в одной конкретной кодировке и сообщить компилятору, что это такое. (Обычно вы используете кодировку исходного кода по умолчанию, принятую компилятором, поскольку она обычно не меняется от системы к системе или от пользователя к пользователю.)
Бит «дополнительных» структур данных, вероятно, относится к тому, что предоставляют стандартные библиотеки языка, такие как список, карта или словарь. Используйте то, чему вас учили до сих пор, например, может быть, просто массив. Конечно, вы можете просто спросить.
Ответ №2:
В принципе, предположим, что коды символов будут находиться в диапазоне 0-127. Вам не нужно будет иметь дело с сумасшедшими символами с акцентом.
Однако, скорее всего, они не будут использовать много, если таковые имеются, кодов ниже 32; поскольку они в основном непечатаемые.
Ответ №3:
Такие символы, как ‘a’ ‘b’ ‘1’ или ‘#’, при хранении и использовании компьютером кодируются в двоичное число.
например, ‘a’ = 1100001 ‘b’ = 1100010
Существует несколько различных стандартов, которые вы могли бы использовать для этой кодировки. ASCII является одним из таких стандартов. Другой наиболее распространенный стандарт называется UTF-8.
Не все символы могут быть закодированы по всем стандартам. ASCII имеет гораздо более ограниченный набор символов, чем UTF-8. Таким образом, кодировка также определяет набор символов «char set», которые поддерживаются этой кодировкой.
ASCII кодирует каждый символ в один байт. Он поддерживает буквы Az и строчные буквы az, цифры 0-9, небольшое количество знакомых символов и ряд управляющих символов, которые использовались в ранних протоколах связи.
Полный набор символов, поддерживаемых ASCII, можно увидеть здесь: https://en.wikipedia.org/wiki/ASCII