Как использовать строковый литерал в C++

Как использовать строковый литерал в C++ Программирование и разработка

Как использовать строковый литерал в C++

На клавиатуре компьютера напечатаны символы. Когда вы нажимаете клавишу, вы видите символ на экране. Примечание: пробел — это тоже символ. Строковый литерал — это последовательность символов. В этой статье объясняется, как использовать строковые литералы C ++. Чтобы понять эту статью, вы должны знать о массивах и указателях C ++.

Символьный литерал

Символьный литерал — это символ в одинарных кавычках. Так,

char ident1 = ‘A’; char ident2 = ‘b’; char ident3 = ‘4’; char ident4 = ‘6’;

все разные определения персонажей. Обратите внимание, что цифра в одинарных кавычках — это символ, а не целое число.

Управляющая последовательность, такая как \ «(см. Ниже) в одинарных кавычках, является символом. Так,

char ident1 = ‘»‘;

это персонаж.

Одиночный символ в двойных кавычках не является символом; это строка из одного символа. Таким образом, «A», «c» или «2» не являются символом, а представляют собой строку из одного символа каждый.

Переменную char можно переназначить позже в программе следующим образом:

char ident = ‘x’;
ident = ‘Y’;

Чтобы предотвратить изменение символа, присвоенного идентификатору, позже в программе, перед определением укажите зарезервированное слово const следующим образом:

const char ident = ‘d’;

Говорят, что переменная identity предназначена только для чтения.

Строковый литерал

Строковый литерал — это последовательность символов в двойных кавычках. Так,

char ident1[] = «I love you»; char ident2[] = «I hate 3 of you»; char ident3[]
= «we are the world»; char ident4[] = «Hello World!»;

все разные определения строковых литералов. Обратите внимание на использование двойных кавычек. Нет ничего лучше обычной переменной для строки. Строковый литерал — это массив символов, в котором вместо разделения с помощью {} последовательность разделяется знаком „«. Символы не разделяются запятыми. В квадратные скобки можно поместить любое число, превышающее количество символов в строковом литерале. Однако квадратные скобки лучше оставить пустыми.

Одиночный символ в двойных кавычках не является символом; это строка из одного символа. Таким образом, „A“, „c“ или „2“ — это не символ, а строка из одного символа каждый.

Строковая переменная не позволяет переназначать полный литерал позже в программе — см. Ниже. Однако отдельные символы могут быть переназначены — см. Ниже.

Одиночные и двойные кавычки в символах или буквах

Чтобы использовать одинарную кавычку в качестве символа, сделайте что-нибудь вроде,

char ident = \’;

Чтобы использовать двойные кавычки в качестве символа в строковом литерале, сделайте что-нибудь вроде:

char ident[] = «ab»cd«;

Обратная косая черта используется в escape-последовательности, чтобы избежать конфликта с разделителями. Чтобы использовать двойные кавычки в качестве символа, не нужно использовать обратную косую черту: ’«’ — это нормально. Чтобы иметь одинарную кавычку в строковом литерале, не нужно использовать обратную косую черту: «ab’cd» — это нормально.

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

Последовательность

Управляющая последовательность может быть одной из следующих:

\‘ » \? \\ \a \b \f \n \r >\t \v

Каждая escape-последовательность обычно вводится либо как символ в одинарных кавычках, либо как escape-последовательность в двойных кавычках.

  • \ ’: используется как символ одинарной кавычки в одинарных кавычках.
  • \ «: Используется как символ двойной кавычки внутри литерала.
  • \? : поскольку ? является зарезервированным символом, его следует экранировать литералом.
  • \\: обратная косая черта должна быть экранирована как символ или строковый литерал, чтобы не иметь другого значения.
  • \ a: один раз подает звуковой сигнал при использовании в качестве символа или внутри строкового литерала.
  • \ b: приводит к возврату на экран в строковом литерале, удаляя предыдущий символ.
  • \ f: вызывает подачу следующей страницы на принтер при использовании в качестве символа или внутри литерала.
  • \ r: возвращает курсор, где должен быть напечатан следующий символ, но внутри текущей строки.
  • \ n: возвращает курсор в начало следующей строки или просто на следующую строку, в зависимости от операционной системы.
  • \ t: создает горизонтальную вкладку.
  • \ v: создает вертикальную вкладку.

Concatenation

По определению два строковых литерала можно соединить пробелом следующим образом:

char ident[] = «abc» «def»;
cout << ident << «\n«;

Результат: abcdef. Это определение можно расширить до более чем двух литералов. Примечание: утверждение — это определение, а не просто присвоение. Определение может даже продолжаться до следующей строки с пробелом, разделяющим строки следующим образом:

char ident[] = «abc» «def»
«ghi»;
cout << ident << «\n«;

Результатом будет abcdefghi.

Примечание. Символы не могут быть объединены таким образом, поскольку одинарные кавычки для символа не могут содержать более одного символа.

Операторы равенства

Одинаковые символы в одном регистре равны. Они не равны, если не принадлежат к одному и тому же делу. Рассматривать,

bool result = ‘B’ == ‘B’;
cout << result << «\n«;

== означает равно, а = означает назначенный, а не равный. Выход 1 для истины. Рассматривать,

bool result = ‘B’ == ‘b’;
cout << result << «\n«;

На выходе 0 для ложного. Рассматривать,

bool result = ‘b’ == ‘c’;
cout << result << «\n«;

На выходе 0 для ложного. Рассматривать,

bool result = ‘B’ != ‘B’;
cout << result << «\n«;

! = означает «не равно», а = означает «назначено» и «не равно». На выходе 0 для ложного. Рассматривать,

bool result = ‘B’ != ‘b’;
cout << result << «\n«;

Выход 1 для истины. Рассматривать,

bool result = ‘b’ != ‘c’;
cout << result << «\n«;

Выход 1 для истины.

Итак, == и! = — операторы равенства.

Операторы отношения

Для обычных символов в C ++ в возрастающем порядке числа идут перед прописными буквами, которые идут перед строчными буквами.

Итак, <вернет true (1), когда левый символ меньше правого символа. Аналогично объясняются и другие операторы отношения, <=,>,> =.

Строковый литерал как объект

Массив — это постоянный указатель на начало последовательности определенного типа данных. Точно так же строка — это постоянный указатель на начало последовательности символов. Сравните следующие определения:

int arr[] = {3, 4, 5, 6, 7};
char str[] = {‘w’, ‘o’, ‘m’, ‘a’, ‘n’};
char stri[] = «woman»;

Первый массив представляет собой массив целых чисел и состоит из пяти элементов. Второй и третий массивы — это массивы символов с разными именами, но с одинаковым количеством элементов. Второй и третий массивы одинаковы, но по своим именам. Текстовое содержимое второго массива ограничивается фигурными скобками; символы разделены запятыми, а каждый символ заключен в одинарные кавычки. Текстовое содержимое третьего массива ограничивается двойными кавычками; символы не разделяются запятыми, и каждый символ не находится в одинарных кавычках. Второй и третий массивы — это два способа создания строки, третий — лучший.

arr — это постоянный указатель на первый элемент своего массива, то есть arr всегда будет указывать на местоположение, имеющее целое число 3, даже если значение 3 изменилось. Размер массива, пять элементов, на самом деле не остается постоянным. Однако каждое из значений массива можно изменить.

str — это постоянный указатель на первый элемент своего массива, то есть str всегда будет указывать на место, имеющее символ «w», даже если значение «w» изменится. Размер символьного массива, состоящего из пяти элементов, на самом деле не остается постоянным. Однако каждое из значений литерала можно изменить.

stri — это постоянный указатель на первый элемент его литерала (массива), то есть stri всегда будет указывать на место с символом w, даже если значение w изменится. Размер строкового литерала (массива), состоящего из пяти элементов, на самом деле не остается постоянным. Однако каждое из значений литерала можно изменить.

Что является константой в массиве или строковом литерале? Адрес памяти первого элемента массива или литерала остается значением имени (идентификатора) массива или литерала и не может быть изменен. Ну, размер массива или литерала на самом деле не остается постоянным. Каждое значение в массиве или литерале можно изменить. Следующий код показывает, как был изменен четвертый элемент каждого из массивов:

int arr[] = {3, 4, 5, 6, 7};
char str[] = {‘w’, ‘o’, ‘m’, ‘a’, ‘n’};
char stri[] = «woman»;

arr[3] = 9;
str[3] = ‘e’;
stri[3] = ‘e’;

cout << arr[3] << \n;
cout << str << \n;
cout << stri << \n;

Результат:

9
womenwomen
женщин

Обратите внимание, что к элементам определенного строкового литерала, как и для третьего определения выше, можно получить доступ с помощью индекса массива (нижнего индекса). Причина второй строки вывода указана ниже.

Подстрочный индекс определения

Обратите внимание, что в приведенных выше определениях нет целого числа для нижнего индекса. Если число элементов не может быть легко определено программистом, целое число для нижнего индекса следует опустить. В любом случае целое число не должно быть меньше количества элементов в массиве.

Для строкового литерала целое число должно быть как минимум на 1 больше, чем количество символов в строке. Это связано с тем, что нулевой символ (\ 0) всегда добавляется компилятором в конец массива, который представляет собой строку, разделенную двойными кавычками. Нулевой символ не добавляется в конец второго массива выше, потому что это не официальная строка. Третий массив — официальная строка. В следующем коде показаны минимальные значения индекса.

int arr[5] = {3, 4, 5, 6, 7};
char str[5] = {‘w’, ‘o’, ‘m’, ‘a’, ‘n’};
char stri[6] = «woman»;

Чтобы второе определение стало официальной строкой, необходимо добавить нулевой символ следующим образом:

int arr[5] = {3, 4, 5, 6, 7};
char str[6] = {‘w’, ‘o’, ‘m’, ‘a’, ‘n’, \0};
char stri[6] = «woman»;

Теперь вывод должен быть таким:

9
женщин
женщины

без вторых «женщин». Обратите внимание, что соответствующий индекс для второго массива — 6, а не 5, как было.

Постоянные буквальные значения

Чтобы предотвратить изменение любого символа в двойных кавычках, присвоенных идентификатору, позже в программе, перед определением укажите зарезервированное слово const, как показано ниже:

const char ident[] = «I love you»;

Операции по обеспечению равенства

Операторы равенства: == и! =. При сравнении переменных (идентификаторов) двух строк сравниваются указатели (адреса) литералов; это не правильно. Для сравнения строк необходимо сравнить литералы, как в следующем коде:

bool result = «woman» == «woman»;
cout << result << \n;

Выход 1 для истины. Сравнение выполняется в словарной манере, но числа идут первыми в порядке возрастания, перед прописными буквами, которые идут перед строчными буквами. Результатом следующего кода является 0, если ложь.

bool result = «woman» != «woman»;
cout << result << \n;

Операторы отношения со строковыми литералами

Операторы отношения не работают со строковыми литералами.

Необработанный строковый литерал

Необработанный строковый литерал позволяет отображать строку как напечатанную, игнорируя escape-последовательности и учитывая символы новой строки. Рассмотрим следующий код:

char str[] = R«(abc\\d efg hij
klmn \n «
 ‘ opq
rst)»;
cout << str << ‘
\n‘;

Результат:

abc\\d efg hij
klmn \n » ‘ opq
rst

В коде необработанный строковый литерал начинается с R, за которым следуют „и“ (. Он заканчивается) и ».

Типы основных строковых литералов C ++

char

Тип char является исходным типом C ++ и обычно хранит символ в 8 битах.

char16_t

Это сохраняет символ в 16 битах.

char32_t

Это сохраняет символ в 32 бита.

wchar_t

char16_t и char32_t — широкие символы. wchar_t — это расширенный символ, который является проприетарным и определяется реализацией.

Заключение

Символьный литерал — это одиночный символ в одинарных кавычках. Управляющая последовательность — это символ, который также может быть заключен в одинарные кавычки. Строковый литерал — это последовательность символов в двойных кавычках. Строковый литерал — это массив символов, заканчивающихся на \ 0. Операторы равенства и отношения работают с символьными литералами. Операторы равенства работают со строковыми литералами, но операторы отношения не работают со строковыми литералами. Идентификаторы символов могут использоваться в сравнениях, но строковые идентификаторы не должны использоваться в сравнениях. Необработанный строковый литерал позволяет отображать строку как напечатанную, игнорируя escape-последовательности и соблюдая новые строки.

Читайте также:  5 причин, по которым вам следует использовать C++ для цифровой обработки сигналов
Оцените статью
bestprogrammer.ru
Добавить комментарий