Символьный литерал
Символьный литерал - это символ в одинарных кавычках. Так,
char identity1 = 'А'; char identity2 = 'б'; символ identity3 = '4'; char идентификатор4 = '6';все разные определения персонажей. Обратите внимание, что цифра в одинарных кавычках - это символ, а не целое число.
Управляющая последовательность, такая как \ ”(см. Ниже) в одинарных кавычках, является символом. Так,
char identity1 = '"';это персонаж.
Одиночный символ в двойных кавычках не является символом; это строка из одного символа. Таким образом, «A», «c» или «2» не являются символом, а представляют собой строку из одного символа каждый.
Переменную char можно переназначить позже в программе следующим образом:
символ идентификатора = 'х';идент = 'Y';
Чтобы предотвратить изменение символа, присвоенного идентификатору, позже в программе, перед определением укажите зарезервированное слово const следующим образом:
const char identity = 'd';Говорят, что переменная identity предназначена только для чтения.
Строковый литерал
Строковый литерал - это последовательность символов в двойных кавычках. Так,
char identity1 [] = "Я люблю тебя"; char identity2 [] = "Я ненавижу троих из вас"; char identity3 []= "мы - мир"; char identity4 [] = "Привет, мир!!";
все разные определения строковых литералов. Обратите внимание на использование двойных кавычек. Нет ничего лучше обычной переменной для строки. Строковый литерал - это массив символов, в котором вместо разделения с помощью последовательность разделяется знаком «». Символы не разделяются запятыми. В квадратные скобки можно поместить любое число, превышающее количество символов в строковом литерале. Однако квадратные скобки лучше оставить пустыми.
Одиночный символ в двойных кавычках не является символом; это строка из одного символа. Таким образом, «A», «c» или «2» - это не символ, а строка из одного символа каждый.
Строковая переменная не позволяет переназначать полный литерал позже в программе - см. Ниже. Однако отдельные символы могут быть переназначены - см. Ниже.
Одиночные и двойные кавычки в символах или буквах
Чтобы использовать одинарную кавычку в качестве символа, сделайте что-нибудь вроде,
символ идентификатора = '\' ';Чтобы использовать двойные кавычки в качестве символа в строковом литерале, сделайте что-нибудь вроде,
char identity [] = "ab" cd ";Обратная косая черта используется в escape-последовательности, чтобы избежать конфликта с разделителями. Чтобы использовать двойные кавычки в качестве символа, не нужно использовать обратную косую черту: '”' можно. Чтобы использовать одинарную кавычку в строковом литерале, не нужно использовать обратную косую черту: «ab'cd» можно.
Поскольку обратная косая черта используется для экранирования символа, она должна быть экранирована другой обратной косой чертой при использовании в качестве символа или в строковом литерале.
Последовательность побега
Управляющая последовательность может быть одной из следующих:
\ '"\? \\ \ a \ b \ f \ n \ r> \ t \ vКаждая escape-последовательность обычно вводится либо как символ в одинарных кавычках, либо как escape-последовательность в двойных кавычках.
- \ ': используется как символ одинарной кавычки в одинарных кавычках.
- \ ”: Используется как символ двойной кавычки внутри литерала.
- \? : поскольку ? зарезервированный символ, его следует экранировать буквальным.
- \\: обратная косая черта должна быть экранирована как символ или строковый литерал, чтобы не приводить к какому-либо другому значению.
- \ a: один раз подает сигнал тревоги при использовании в качестве символа или внутри строкового литерала.
- \ b: приводит к возврату в отображении в строковом литерале, удаляя предыдущий символ.
- \ f: вызывает подачу следующей страницы на принтер при использовании в качестве символа или внутри литерала.
- \ r: возвращает курсор, где должен быть напечатан следующий символ, но в текущей строке.
- \ n: возвращает курсор в начало следующей строки или только на следующую строку, в зависимости от операционной системы.
- \ t: создает горизонтальную вкладку.
- \ v: создает вертикальную вкладку.
Операции с персонажами
Конкатенация
По определению два строковых литерала можно соединить пробелом следующим образом:
char identity [] = "abc" "def";cout << ident << "\n";
Вывод: abcdef . Это определение можно расширить до более чем двух литералов. Примечание: утверждение - это определение, а не просто присвоение. Определение может даже продолжаться до следующей строки с пробелом, разделяющим строки следующим образом:
char identity [] = "abc" "def"«ги»;
cout << ident << "\n";
Результат: abcdefghi.
Примечание: символы не могут быть объединены таким образом, поскольку одинарные кавычки для символа не могут содержать более одного символа.
Операторы равенства
Одинаковые символы в одном регистре равны. Они не равны, если не принадлежат к одному и тому же корпусу. Рассмотреть возможность,
bool result = 'B' == 'B';cout << result << "\n";
== означает равно, а = означает назначенный, а не равно. Выход 1 для истины. Рассмотреть возможность,
bool result = 'B' == 'b';cout << result << "\n";
На выходе 0 для false. Рассмотреть возможность,
bool result = 'b' == 'c';cout << result << "\n";
На выходе 0 для false. Рассмотреть возможность,
bool result = 'B' != 'B';cout << result << "\n";
!= означает "не равно", а "=" означает "назначено" и "не равно". На выходе 0 для false. Рассмотреть возможность,
bool result = 'B' != 'b';cout << result << "\n";
Выход 1 для истины. Рассмотреть возможность,
bool result = 'b' != 'c';cout << result << "\n";
Выход 1 для истины.
Итак, == и != - операторы равенства.
Операторы отношения
Для обычных символов в C ++ в возрастающем порядке цифры идут перед прописными буквами, а перед строчными.
Так < will return true (1) when the left character is less than the right character. The other relational operators, <=, >, > = объясняются аналогично.
Строковый литерал как объект
Массив - это постоянный указатель на начало определенной последовательности типов данных. Точно так же строка является постоянным указателем на начало последовательности символов. Сравните следующие определения:
int arr [] = 3, 4, 5, 6, 7;char str [] = 'ш', 'о', 'м', 'а', 'н';
char stri [] = "женщина";
Первый массив представляет собой массив целых чисел и состоит из пяти элементов. Второй и третий массивы - это массивы символов с разными именами, но с одинаковым количеством элементов. Второй и третий массивы одинаковы, но для их имен. Текстовое содержимое второго массива ограничивается фигурными скобками; символы разделены запятыми, и каждый символ находится в одинарных кавычках. Текстовое содержимое третьего массива ограничивается двойными кавычками; символы не разделяются запятыми, и каждый символ не в одинарных кавычках. Второй и третий массивы - это два способа создания строки, третий - лучший.
arr - это постоянный указатель на первый элемент своего массива, то есть arr всегда будет указывать на местоположение, имеющее целое число, 3, даже если значение 3 изменилось. Размер массива, пять элементов, на самом деле не остается постоянным. Однако каждое из значений массива можно изменить.
str - это постоянный указатель на первый элемент своего массива, что означает, что str всегда будет указывать на место, имеющее символ 'w', даже если значение 'w' изменится. Размер символьного массива, пять элементов, на самом деле не остается постоянным. Однако каждое из значений литерала можно изменить.
stri - это постоянный указатель на первый элемент его литерала (массива), то есть stri всегда будет указывать на место с символом w, даже если значение w изменится. Размер строкового литерала (массива), пять элементов, на самом деле не остается постоянным. Однако каждое из значений литерала можно изменить.
Что является константой в массиве или строковом литерале? Адрес памяти первого элемента массива или литерала остается как значение имени (идентификатора) массива или литерала и не может быть изменен. Ну, размер массива или литерала на самом деле не остается постоянным. Каждое значение в массиве или литерале можно изменить. Следующий код показывает, как был изменен четвертый элемент каждого из массивов:
int arr [] = 3, 4, 5, 6, 7;char str [] = 'ш', 'о', 'м', 'а', 'н';
char stri [] = "женщина";
arr [3] = 9;
str [3] = 'е';
stri [3] = 'е';
cout << arr[3] << '\n';
cout << str << '\n';
cout << stri << '\n';
Результат:
9женщины женщины
женщины
Обратите внимание, что к элементам определенного строкового литерала, как и для третьего определения выше, можно получить доступ с помощью индекса массива (нижнего индекса). Причина второй строки вывода приведена ниже.
Подстрочный индекс определения
Обратите внимание, что в приведенных выше определениях нет целого числа для нижнего индекса. Когда количество элементов не может быть легко определено программистом, целое число для нижнего индекса следует опустить. В любом случае целое число не должно быть меньше количества элементов в массиве.
Для строкового литерала целое число должно быть как минимум на 1 больше, чем количество символов в строке. Это связано с тем, что нулевой символ (\ 0) всегда добавляется компилятором в конец массива, который представляет собой строку, разделенную двойными кавычками. Нулевой символ не добавляется в конец второго массива выше, потому что это не официальная строка. Третий массив - официальная строка. В следующем коде показаны минимальные значения индекса.
int arr [5] = 3, 4, 5, 6, 7;char str [5] = 'ш', 'о', 'м', 'а', 'н';
char stri [6] = "женщина";
Чтобы второе определение стало официальной строкой, необходимо добавить нулевой символ следующим образом:
int arr [5] = 3, 4, 5, 6, 7;char str [6] = 'ш', 'о', 'м', 'а', 'п', '\ 0';
char stri [6] = "женщина";
Теперь результат должен быть,
9женщины
женщины
без вторых «женщин». Обратите внимание, что соответствующий индекс для второго массива - 6, а не 5, как было.
Постоянные буквальные значения
Чтобы предотвратить изменение любого символа в двойных кавычках, присвоенных идентификатору, позже в программе, перед определением укажите зарезервированное слово const следующим образом:
const char identity [] = "Я люблю тебя";Операции со строковыми литералами
Операции по обеспечению равенства
Операторы равенства: == и !знак равно . При сравнении переменных (идентификаторов) двух строк сравниваются указатели (адреса) литералов; это не правильно. Для сравнения строк необходимо сравнить литералы, как в следующем коде:
bool result = "женщина" == "женщина";cout << result << '\n';
Выход 1 для истины. Сравнение выполняется в словарной манере, но числа идут первыми в порядке возрастания, перед прописными буквами, которые идут перед строчными буквами. Результатом следующего кода является 0, если ложь.
bool result = "женщина" != "женщина";cout << result << '\n';
Операторы отношения со строковыми литералами
Операторы отношения не работают со строковыми литералами.
Необработанный строковый литерал
Необработанный строковый литерал позволяет отображать строку как напечатанную, игнорируя escape-последовательности и соблюдая новые строки. Рассмотрим следующий код:
char str [] = R "(abc \\ d efg hijklmn \ n "'opq
первая) ";
cout << str << '\n';
Результат:
abc \\ d efg hijklmn \ n "'opq
первый
В коде необработанный строковый литерал начинается с R, за которым следуют ”и ( . Он заканчивается на) и «.
Типы основных строковых литералов C ++
символ
Тип char является исходным типом C ++ и обычно хранит символ в 8 битах.
char16_t
Это хранит символ в 16 битах.
char32_t
Это хранит символ в 32-битном формате.
wchar_t
char16_t и char32_t - широкие символы. wchar_t - это расширенный символ, который является проприетарным и определяется реализацией.
Заключение
Символьный литерал - это одиночный символ в одинарных кавычках. Управляющая последовательность - это символ, который также может быть в одинарных кавычках. Строковый литерал - это последовательность символов в двойных кавычках. Строковый литерал - это массив символов, заканчивающихся на \ 0. Операторы равенства и отношения работают с символьными литералами. Операторы равенства работают со строковыми литералами, но реляционные операторы не работают со строковыми литералами. Идентификаторы символов могут использоваться в сравнениях, но строковые идентификаторы не должны использоваться в сравнениях. Необработанный строковый литерал позволяет отображать строку как напечатанную, игнорируя escape-последовательности и соблюдая новые строки.
Chrys