Что означает предположение, что набор символов равен ASCII?

#data-structures

#структуры данных

Вопрос:

Я решал проблему ниже, читая ее решение в первой строке, которую я прочитал, может кто-нибудь помочь мне в объяснении предположим, что набор символов равен ASCII ** Мне не нужно никакого другого решения этой проблемы, я просто хочу понять утверждение **

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

Заранее спасибо за помощь.

Комментарии:

1. en.m.wikipedia.org/wiki/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