Символы в с++ — Помогите плиз в с++ вывести символы


Содержание

Клуб программистов

Delphi programming

Подписаться на рассылку:

Урок З. Вывод сообщений на экран

Все программы на C++, созданные вами в уроках 1 и 2, использовали выходной поток cout для вывода сообщений на экран. В этом уроке вы будете использовать cout для вывода символов, целых чисел, например 1001, и чисел с плавающей точкой, например 0.12345. К концу данного урока вы освоите следующие основные концепции:

  • Для вывода символов и чисел на экран вы можете использовать выходной поток cout.
  • В C++ можно использовать с cout специальные символы для вывода табуляции или новой строки и даже для воспроизведения звука на вашем компьютере.
  • В C++ можно легко отображать числа в десятичном, восьмеричном (по основанию 8) или шестнадцатеричном (по основанию 16) формате.
  • Используя в командной строке операционной системы операторы переназначения, вы можете перенаправить выходные сообщения своей программы, посылаемые в cout, с экрана в файл или на принтер.
  • Используя выходной поток cerr, ваши программы могут посылать сообщения на стандартное устройство ошибок, избавляя пользователей от необходимости переназначения сообщений.
  • Вы можете форматировать вывод вашей программы, используя модификатор setw внутри выходного потока.

Почти все создаваемые вами программы на C++ используют cout для вывода сообщений на экран. Из этого урока вы узнаете, как лучше использовать сом/.

ИСПОЛЬЗОВАНИЕ cout ДЛЯ ВЫВОДА ЧИСЕЛ

До сих пор созданные вами программы использовали сом/ для вывода символьных строк (букв и чисел, взятых в кавычки). Теперь вы узнаете, что сом/ можно также использовать для вывода чисел. Следующая программа 1001.СРР выводит число 1001 на ваш экран:

Откомпилируйте и запустите эту программу. На вашем экране будет отображено число 1001, как показано ниже:

Далее отредактируйте программу и измените оператор cout , чтобы вывести число 2002, как показано ниже:

Кроме отображения целых чисел (чисел без десятичной точки), сом/также позволяет вашим программам отображать числа с плавающей точкой, например 1.2345. Следующая программа FLOATING.CPP использует сом/для вывода числа 0.12345 на экран:

Как и ранее, откомпилируйте и запустите эту программу. На вашем экране появится следующий вывод:

ВЫВОД НЕСКОЛЬКИХ ЗНАЧЕНИЙ ОДНОВРЕМЕННО

Как вы уже знаете, двойной знак «меньше» является операцией вставки (эта операция вставляет символы в выходной поток для отображения). С помощью cout вы можете использовать несколько операций вставки в пределах одного оператора. Например, следующая программа 1001ТОО.СРР использует эту операцию четыре раза для отображения числа 1001 на вашем экране:

Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующее:

Каждый раз, когда в C++ встречается операция вставки, число или символы просто добавляются к тем, что находятся в настоящее время в выходном потоке. Следующая программа SHOW1001.CPP с помощью cout выводит символьную строку и число:

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

Как и ранее, обратите внимание на расстановку пробелов до и после числа 1001.

Наконец, следующая программа MIXMATCH.CPP комбинирует строки, символы, целые числа и числа с плавающей точкой внутри одного и того же выходного потока:

Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:

В 20 лет мой оклад был 493.34

ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ СИМВОЛОВ ВЫВОДА

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

Если необходимо переместить курсор в начало следующей строки, можно поместить символ новой строки (\n) в выходной поток. В C++ вам предоставляется два разных способа генерации новой строки. Во-первых, вы можете поместить символы \n внутри символьной строки. Например, следующая программа TWOLINES.CPP отображает свой вывод в виде двух строк, используя символ новой строки:

Когда вы откомпилируете и запустите эту программу, символ новой строки обеспечит вывод двух строк, как показано ниже:

Это строка один

Если вы не выводите символьную строку, можете поместить символ новой строки внутри одинарных кавычек. Например, следующая программа NEWLINES.CPP выводит числа 1, 0, 0 и 1, каждое на своей собственной строке:

В дополнение к использованию символа новой строки для продвижения курсора в начало следующей строки ваши программы могут использовать символ endl (конец строки). Следующая программа ENDL.CPP иллюстрирует использование endl для продвижения курсора в начало новой строки:

Как и ранее, когда вы откомпилируете и запустите эту программу, на экране будет отображен вывод программы в виде двух строк:

Учимся программировать на языке C++

Наконец, следующая программа ADDRESS.CPP выводит адрес издательства «Jamsa Press» в несколько строк:

Другие специальные символы

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

Таблица 3.1. Специальные символы для использования с cout.

Символ

Назначение

Сигнальный (или звонок) символ

Символ возврата

Символ перевода страницы

Символ новой строки

Возврат каретки (не перевод строки)

Символ горизонтальной табуляции

Символ вертикальной табуляции

Символ обратный слеш

Знак вопроса

Одинарные кавычки

Двойные кавычки

Нулевой символ

Восьмеричное значение, например \007

\xhhhh

Шестнадцатеричное значение, например \xFFFF

Замечание: При использовании специальных символов, перечисленных в табл. 3.1, вам следует располагать их внутри одинарных кавычек, если вы используете данные символы сами по себе, например ‘\n’, или внутри двойных кавычек, если вы используете их внутри строки, например «Привem\nMup!».

Следующая программа SPECIAL.CPP использует специальные символы сигнала (\а) и табуляции (\t) для выдачи звука на встроенный динамик компьютера и затем выводит слова Звонок Звонок Звонок, разделенные табуляцией:

ВЫВОД ВОСЬМЕРИЧНЫХ И ШЕСТНАДЦАТЕРИЧНЫХ ЗНАЧЕНИЙ

Программы, представленные в этом уроке до сих пор, выводили числа в десятичном виде. В зависимости от назначения ваших программ вам, возможно, потребуется выводить числа в восьмеричном или шестнадцатеричном виде. Для этого можно разместить модификаторы dec, oct и hex внутри выходного потока. Следующая программа ОСТНЕХ.СРР использует эти модификаторы для вывода значений в десятичном, восьмеричном и шестнадцатеричном виде:

Когда вы откомпилируете и запустите эту программу, на экране появится следующий результат:

Восьмеричный: 12 24

Шестнадцатеричный: а 14

Примечание: Когда вы используете один из модификаторов для выбора восьмеричного, шестнадцатеричного или десятичного вывода, ваш выбор будет оставаться в силе до тех пор, пока программа не закончится или пока вы не используете другой модификатор.

ВЫВОД НА СТАНДАРТНОЕ УСТРОЙСТВО ОШИБОК

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

Если вашей программе нужно вывести сообщение об ошибке, вы должны использовать выходной поток cerr. C++ связывает cerr со стандартным устройством ошибок операционной системы. Следующая программа CERR.CPP использует выходной поток cerr для вывода на экран сообщения «Это сообщение появляется всегда «:

Откомпилируйте и запустите эту программу. Далее попытайтесь перенаправить вывод программы в файл, используя оператор переназначения вывода:

Так как операционная система не позволит вашим программам перенаправить вывод, записываемый на стандартное устройство ошибок, сообщение появится на вашем экране.

УПРАВЛЕНИЕ ШИРИНОЙ ВЫВОДА

Несколько предыдущих программ выводили числа на экран. Чтобы гарантировать правильное отображение этих чисел (с правильной расстановкой пробелов), программы включали пробелы до и после чисел. При выводе на cout или cerr ваши программы могут указать ширину вывода каждого числа, используя модификатор setw (установка ширины). С помощью setw программы указывают минимальное количество символов, занимаемое числом. Например, следующая программа SETW.CPP использует модификатор setw для выбора ширины 3, 4, 5 и 6 для числа 1001. Чтобы использовать модификатор setw, ваша программа должна включать заголовочный файл iomanip.h:

Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод:

Мое любимое число равно1001

Мое любимое число равно1001

Мое любимое число равно 1001

Мое любимое число равно 1001

Если вы указываете ширину с помощью setw, вы указываете минимальное количество символьных позиций, занимаемых числом. В предыдущей программе модификатор setw(3) указывал минимум три символа. Однако, так как число 1001 потребовало больше трех символов, cout использовал реально требуемое количество, которое в данном случае равнялось четырем. Следует отметить, что при использовании setw для выбора ширины, указанная ширина действительна для вывода только одного числа. Если вам необходимо указать ширину для нескольких чисел, вы должны использовать setw несколько раз.

Замечание: Предыдущая программа использует заголовочный файл IOMANIP.H. Вам, возможно, понадобится сейчас напечатать и исследовать содержимое этого файла. Как и в случае с заголовочным файлом IOSTREAM.H вы найдете данный файл внутри подкаталога INCLUDE, который находится в каталоге с файлами вашего компилятора.

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Из этого урока вы узнали несколько способов использования cout для отображения вывода на экран. Все программы, которые вы создадите в процессе изучения оставшейся части книги, будут использовать cout для отображения вывода. Из урока 4 вы узнаете, как использовать переменные внутри своих программ для хранения значений, которые могут изменяться в процессе выполнения программы. Однако до изучения урока 4 убедитесь, что вы освоили следующие основные концепции:


    1. Выходной поток cout позволяет вам выводить символы и числа.
    2. Используя специальные символы внутри выходного потока, ваша программа может указать новую строку, табуляцию и другие специальные возможности.
    3. Для продвижения курсора в начало следующей строки программы могут создать новую строку, используя символ \n или модификатор endl.
    4. Модификаторы dec, oct и hex позволяют программам выводить значения в десятичном, восьмеричном и шестнадцатеричном виде.
    5. Используя выходной поток cerr, программы могут записать сообщения в стандартное устройство ошибок операционной системы.
    6. С помощью модификатора setw ваши программы могут управлять шириной вывода чисел.

Символы в с++ — Помогите плиз в с++ вывести символы

Программка составлена совершенно правильно, и делает то, что от нее и требовалось: читает символы с консоли и, если символом оказался пробел, выходит из цикла. Единственная особенность функции getchar() заключается в том, что для выполнения ввода она ждет нажатия Enter. Вводим символ, нажимаем Enter и символ считывается. Так что для ввода каждого символа, в т. ч. пробела, придется нажимать Enter. Существует функция, которая не ждет Enter, а выполняет ввод сразу после нажатия клавиши: getch(). Она не входит в стандарт C и C++, но вроде как есть в большинстве реализаций языка. Для этого примера подойдет больше всего. Правда она не выполняет эхо, а потому отображение символа на экран придется делать самому, например, функцией int putchar(int) . Также в Visual C++ вроде как есть другие наименования и реализации getch, см.,например, _getch и _getche. _getche работает как getch, но имеет эхо на экран.

Вот реализация программы с getch.
Объявление функции getch содержится в файле conio.h (не стандартном).

Символы в с++ — Помогите плиз в с++ вывести символы

Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.11.2005
Где: Украина, Киев

Репутация: нет
Всего: нет

Люди хелп. Есть задача о выводе на экран кода по символу:

Код
#include
#include
main()
<
printf(«Najmite lubuu klavishu\n»);
unsigned char ch;
ch=getch();
switch(ch)
<
default: printf(«%i\n»,int(ch)); break;
>
getch();
>

А как сделать чтоб на экран выводился символ по коду

Это сообщение отредактировал(а) zarogon — 4.11.2005, 18:42

Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97

powerfox
Дата 4.11.2005, 20:44 (ссылка) | (нет голосов) Загрузка .
Код
#include
#include

int main()
<
std::cout

в строках 9-10 вывод по коду символа

Это сообщение отредактировал(а) powerfox — 4.11.2005, 20:45

Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173

Void
Дата 4.11.2005, 20:49 (ссылка) | (нет голосов) Загрузка .
Код
#include
#include

int main(void) <
int code;
printf(«Enter symbol code: «);
scanf(«%i», &code);
if (code UCHAR_MAX) <
printf(«Hey, stupid, it must be in [0; %i] interval\n», UCHAR_MAX);
return 1;
>
printf(«%c», (char) code);
return 0;
>

Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.11.2005
Где: Украина, Киев

Репутация: нет
Всего: нет

Спасибочки вам Вы лучшие А можно еще и такую задачку: Вывести на экран предыдущие и следующие буквы латинского алфавита

Это сообщение отредактировал(а) zarogon — 4.11.2005, 22:23

zarogon
Дата 4.11.2005, 22:09 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24

BreakPointMAN
Дата 4.11.2005, 22:40 (ссылка) | (нет голосов) Загрузка .
Цитата(zarogon @ 4.11.2005, 22:09)
Вывести на экран предыдущие и следующие буквы латинского алфавита

в каком смысле?
Добавлено @ 22:41
т.е. вводится буква латинская, и нужно вывести ту букву, что стоит перед ней и ту, что после нее?

Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.11.2005
Где: Украина, Киев

Репутация: нет
Всего: нет

zarogon
Дата 4.11.2005, 22:53 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24

Тебе на C или C++ надо? Вот на C так примерно:

BreakPointMAN
Дата 4.11.2005, 23:01 (ссылка) | (нет голосов) Загрузка .
Код
#include
#include
#include

int main()
<
char c;
do
<
clrscr();
printf(«Enter latin letter, please: «);
scanf(«%c»,&c);
>
while(!isalpha(c));

char p=c-1, n=c+1;
if(!isalpha(p)) p=’-‘;
if(!isalpha(n)) n=’-‘;

printf(«\nPrevious letter: %c», p);
printf(«\nNext letter: %c», n);

getch();
return 0;
>

Это сообщение отредактировал(а) BreakPointMAN — 4.11.2005, 23:07

Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.11.2005
Где: Украина, Киев

Репутация: нет
Всего: нет

Да работает СПАСИБКИ. И еще задача шахматная, эту если можете и не в облом Вывести на экран уведомление если шахматная фигура может передвинуться на доске с позиции х1, у1 на х2, у2 рассмотреть такие фигуры: ладья, слон, ферзь учитывать то что на доске координаты по оси х символьные. Вот вроде как на паскале:

zarogon
Дата 4.11.2005, 23:32 (ссылка) | (нет голосов) Загрузка .
Код
uses crt;
var
x1,x2:char;
y1,y2,f:byte;
begin
writeln(‘1-ladja, 2-slon, 3-ferz’);
readln(f);
writeln(‘x1,y1,x2,y2’);
readln(‘x1,y1,x2,y2’);
case of
1:if(x1=x2) of (y1=y2) then
writeln(‘Ladja mojet tak hodit’);
else writeln(‘net’);
2:if abs(ord(x2)-ord(x1)=abs(y2-y1) then
writeln(‘Da’);
esle
writeln(‘Net’);
3:if ((x1-x2) or (y1-y) or (abs(ord(x2)-ord(x1))=abs(y2-y1)) then
writeln(‘Da’);
else
writeln(‘Net’);
end;
end.

Это сообщение отредактировал(а) zarogon — 5.11.2005, 00:11

Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97

powerfox
Дата 5.11.2005, 11:05 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173

Void
Дата 5.11.2005, 16:34 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.11.2005
Где: Украина, Киев

Репутация: нет
Всего: нет

zarogon
Дата 5.11.2005, 17:07 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24

BreakPointMAN
Дата 5.11.2005, 17:52 (ссылка) | (нет голосов) Загрузка .
Цитата(zarogon @ 5.11.2005, 17:07)
Блин пытался эту задачку на Си зделать не выходит

Да ты ее хоть на паскале сначала сделай.
Перевод втупую:

Код
int main()
<
char x1,x2;
int y1,y2, f;
printf(«1-ladja, 2-slon, 3-ferz: «);
scanf(«%d»,&f);

switch(f)
<
case 1:
if((x1==x2) || (y1==y2))
printf(«Ladja mojet tak hodit»);
else
printf(«net»);
break;
case 2:
if (abs(x2-x1)==abs(y2-y1))
printf(«Da»);
else
printf(«Net»);
break;
case 3:
if ((x1==x2) || (y1==y2) || abs(x2-x1)==abs(y2-y1))
printf(«Da»);
else
printf(«Net»);
break;
>
getch();
return 0;
>

Что-то подправил, но работает или нет — не проверял. вводить данные так:
1
a1,a8

Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97

powerfox
Дата 5.11.2005, 20:04 (ссылка) | (нет голосов) Загрузка .
Цитата(Void @ 5.11.2005, 16:34)
powerfox
Изначальный код, который привел автор, был на чистейшем Си диалекта K&R. Поэтому, думаю, ему и сочли нужным отвечать тоже на Си.

Не обратил внимания — было написано Borland C++.

:
А реализация Borland сильно отличается от стандарта?

Ввод вывод русского текста в консольном приложении С++ Code::Bloks

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

Только прошу помнить , что я ещё даже не чайник. Это из книги по С++.

Это мне ничего не объяснило.
Написание в самом тексте программы русского текста — это одна сторона медали.

. а вот вывод в моём примере из книги. где происходит предложение записи в самой консоли — cin.getline(name, ArSize);
cin.getline(dessert, ArSize);

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

ТС, проблема заключается в том, что вендовая консоль не умеет нормально работать с юникодом. Да и в общем-то, никак не умеет. Поэтому приходится использовать хаки с setlocale() , CharToOem() и т.п. Попробуйте воспользоваться методом, который предложил Иван — по ссылке из второго поста.

P.S. У меня все работает:

P.P.S. В ближайшем будущем советую задавать namespace по умолчанию в глобальном пространстве, чтобы избежать путаницы при работе с функциями.

А я решил проблему по-другому.

Я программирую в Dev C++ и не знаю, работает ли этот приём в других компиляторах.
Короче, все русские буквы при выводе на консоль шифруются шифром Цезаря, т.е. к их коду прибавляется определённое число (одно и то же), и результат выводится на экран.

А кроме того, оказалось, что компилятор сначала переводит буквы в отрицательный диапазон.
Вот прога, выводящая все символы в диапазоне от -255 до 0:

Немного поколдовав над символами, я пришёл к такому выводу — к кодам строчных букв в диапазоне от «п» до «я» компилятор прибавляет 32, а ко всем остальным (включая и заглавные) 64. Исходя из результатов предыдущей программы я создал процедуру вывода русскоязычного текста:

Эта процедура работает с указателями и устаревшей функцией вывода printf, но я думаю,
не составит особого труда её переделать, кому захочется.

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки

Вход Регистрация Donate FAQ Правила Поиск

пробельные символы в C++

На страницу 1 , 2 След.
Печатать страницу | Печатать всю тему Пред. тема | След. тема
Nerazumovskiy
23/12/08
245
Украина

у меня не увидело в консоле 7,8,9,10,32 символы.
___________-
не знал что в консоле есть смайлики

Добавлено спустя 2 минуты 11 секунд:

ах ну да ещо -1 символ не увидело))
__________
интересно зачем в консоле комуто нужны были обозначения для мастей))

Заслуженный участник

21/03/06
1545
Москва

EOF — это признак конца файла, может иметь произвольный код, но обычно 255 (-1).
код 26, если не ошибаюсь, это либо перенос строки, либо возврат каретки.

Добавлено спустя 23 секунды:

Вообще найдите таблицу ASСII и комментарии к ней.

Экс-модератор

Заслуженный участник

15/05/05
3422
USA

21/03/06
1545
Москва

Точно, забыл уже .

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

И, по-моему, была аналогичная заморочка с параметрами CGI-скрипта в www. В общем, совершенно никому ненужные заморочки, портящие кровь программистам.

09/02/09
90
Novosibirsk

Это сильно зависит от используемого устройства вывода и применяемого набора символов.
Одна и та-же строка может по-разному выглядеть даже в разных текстовых редакторах, не говоря уж о принтерах или алфавитно-цифровых терминалах.
К тому же язык С вовсе не требует применять для представления текстов именно код ASCII.

Символ под названием EOF есть в ASCII, но это совсем не то значение, которое возвращает функция, скажем, int getchar(void); при достижении конца файла. В самом языке С никакого символа EOF вообще нет. Есть константа с таким именем, определённая обычно в файле stdio.h. Эта константа специально выбрана так, что «не лезет» в переменную типа char и не может быть спутана ни с каким «нормальным» символом, а функция getchar() по этой причине возвращает значение типа int , а не char .

Спасибо, программу написал. За пробельные символы считал только ‘\0’, ‘ ‘, ‘\t’, так как даже вертикальная табуляция в MS Studio 2008 почему-то не заработала.

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

Один момент остался непонятен, хотя немножко не по теме. Если на вход программы подать пустой файл или задать несуществующий файл, возможно ли, что будет возвращено NULL? Просто я использовал такую проверку:

Строковые и символьные литералы (C++) String and character literals (C++)

В C++ поддерживаются различные типы строк и символов, а также доступны различные способы выражения значений литералов каждого из этих типов. C++ supports various string and character types, and provides ways to express literal values of each of these types. В исходном коде содержимое символьных и строковых литералов выражается с помощью кодировки. In your source code, you express the content of your character and string literals using a character set. Универсальные имена символов и escape-символы позволяют представить любую строку, используя только основную кодировку исходного кода. Universal character names and escape characters allow you to express any string using only the basic source character set. Необработанные строковые литералы позволяют не использовать escape-символы и могут применяться для выражения всех типов строковых литералов. A raw string literal enables you to avoid using escape characters, and can be used to express all types of string literals. Можно также создавать литералы без необходимости выполнения дополнительных действий по созданию std::string или преобразованию. You can also create std::string literals without having to perform extra construction or conversion steps.

Строковые литералы могут не иметь префикса или включать префиксы u8 , L , u и U для обозначения кодировок обычных символов (однобайтовых или многобайтовых), UTF-8, расширенных символов (UCS-2 или UTF-16), UTF-16 и UTF-32, соответственно. String literals can have no prefix, or u8 , L , u , and U prefixes to denote narrow character (single-byte or multi-byte), UTF-8, wide character (UCS-2 or UTF-16), UTF-16 and UTF-32 encodings, respectively. Необработанный строковый литерал R может u8R иметь LR префиксы, UR ,, uR и для необработанных эквивалентов этих кодировок. A raw string literal can have R , u8R , LR , uR , and UR prefixes for the raw version equivalents of these encodings. Чтобы создать временные или статические std::string значения, можно использовать строковые литералы или необработанные строковые литералы s с суффиксом. To create temporary or static std::string values, you can use string literals or raw string literals with an s suffix. Дополнительные сведения см. в разделе строковые литералы ниже. For more information, see the String literals section below. Дополнительные сведения о базовой кодировке исходного кода, универсальных именах символов и использовании символов из расширенных кодовых страниц в исходном коде см. в разделе наборы символов. For more information on the basic source character set, universal character names, and using characters from extended codepages in your source code, see Character sets.

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

Символьный литерал состоит из символьной константы. A character literal is composed of a constant character. Она представлена символом, заключенным в одинарные кавычки. It is represented by the character surrounded by single quotation marks. Существует пять типов символьных литералов: There are five kinds of character literals:

Обычные символьные литералы типа char, например ‘a’ Ordinary character literals of type char, for example ‘a’

Символьные литералы UTF-8 типа char (char8_t в c++ 20), например u8’a’ UTF-8 character literals of type char (char8_t in C++20), for example u8’a’

Расширенные символьные литералы типа wchar_t , например L’a’ . Wide-character literals of type wchar_t , for example L’a’

Символьные литералы UTF-16 типа char16_t , например u’a’ UTF-16 character literals of type char16_t , for example u’a’

UTF-32 символьные литералы типа char32_t , например U’a’ UTF-32 character literals of type char32_t , for example U’a’

Символом, используемым для символьного литерала, может быть любой символ, за исключением символов\обратной косой черты («»), одинарной кавычки (‘) или новой строки. The character used for a character literal may be any character, except for the reserved characters backslash (‘\’), single quotation mark (‘), or newline. Зарезервированные символы можно указывать с помощью escape-последовательности. Reserved characters can be specified by using an escape sequence. Символы можно указывать с помощью универсальных имен символов, при условии что тип является достаточно крупным для размещения символа. Characters may be specified by using universal character names, as long as the type is large enough to hold the character.

кодировка Encoding

Символьные литералы кодируются по-разному в соответствии с их префиксом. Character literals are encoded differently based their prefix.

Символьный литерал без префикса является обычным символьным литералом. A character literal without a prefix is an ordinary character literal. Значение обычного символьного литерала, содержащего один символ, escape-последовательность или универсальное имя символа, которое может быть представлено в наборе символов выполнения, имеет значение, равное числовому значению его кодировки в наборе символов выполнения. The value of an ordinary character literal containing a single character, escape sequence, or universal character name that can be represented in the execution character set has a value equal to the numerical value of its encoding in the execution character set. Обычный символьный литерал, содержащий более одного символа, escape-последовательности или универсального имени символа, являетсямногосимвольным литералом. An ordinary character literal that contains more than one character, escape sequence, or universal character name is a multicharacter literal. Многосимвольный литерал или обычный символьный литерал, который не может быть представлен в наборе символов выполнения, имеет тип int, а его значение определяется реализацией. A multicharacter literal or an ordinary character literal that can’t be represented in the execution character set has type int, and its value is implementation-defined. Сведения о КОМПИЛЯТОРОМ MSVC см. в разделе, относящемся к корпорации Майкрософт ниже. For MSVC, see the Microsoft specific section below.

Символьный литерал, начинающийся с L префикса, является литералом расширенных символов. A character literal that begins with the L prefix is a wide-character literal. Значение литерала расширенных символов, содержащего один символ, escape-последовательность или универсальное имя символа, имеет значение, равное числовому значению его кодировки в наборе расширенных символов выполнения, если только символьный литерал не имеет представления в набор расширенных символов выполнения. в этом случае значение определяется реализацией. The value of a wide-character literal containing a single character, escape sequence, or universal character name has a value equal to the numerical value of its encoding in the execution wide-character set unless the character literal has no representation in the execution wide-character set, in which case the value is implementation-defined. Значение литерала расширенных символов, содержащего несколько символов, escape-последовательностями или универсальных имен символов, определяется реализацией. The value of a wide-character literal containing multiple characters, escape sequences, or universal character names is implementation-defined. Сведения о КОМПИЛЯТОРОМ MSVC см. в разделе, относящемся к корпорации Майкрософт ниже. For MSVC, see the Microsoft specific section below.

Символьный литерал, начинающийся с u8 префикса, является символьным литералом UTF-8. A character literal that begins with the u8 prefix is a UTF-8 character literal. Значение символьного литерала UTF-8, содержащего один символ, escape-последовательность или универсальное имя символа, имеет значение, равное значению его кодовой точки ISO 10646, если оно может быть представлено в одной единице кода UTF-8 (соответствующем элементам управления C0 и Basic Latin Блок Юникода). The value of a UTF-8 character literal containing a single character, escape sequence, or universal character name has a value equal to its ISO 10646 code point value if it can be represented by a single UTF-8 code unit (corresponding to the C0 Controls and Basic Latin Unicode block). Если значение не может быть представлено одной единицей кода UTF-8, программа неправильно сформирована. If the value can’t be represented by a single UTF-8 code unit, the program is ill-formed. Символьный литерал в кодировке UTF-8, содержащий более одного символа, escape-последовательности или универсального имени символа, имеет неправильный формат. A UTF-8 character literal containing more than one character, escape sequence, or universal character name is ill-formed.

Символьный литерал, начинающийся с u префикса, является символьным литералом UTF-16. A character literal that begins with the u prefix is a UTF-16 character literal. Значение символьного литерала UTF-16, содержащего один символ, escape-последовательность или универсальное имя символа, имеет значение, равное значению его кодовой точки ISO 10646, если оно может быть представлено в одной единице кода UTF-16 (соответствующее базовой многоязыковой плоскости). ). The value of a UTF-16 character literal containing a single character, escape sequence, or universal character name has a value equal to its ISO 10646 code point value if it can be represented by a single UTF-16 code unit (corresponding to the basic multi-lingual plane). Если значение не может быть представлено одной единицей кода UTF-16, программа неправильно сформирована. If the value can’t be represented by a single UTF-16 code unit, the program is ill-formed. Символьный литерал UTF-16, содержащий более одного символа, escape-последовательности или универсального имени символа, имеет неправильный формат. A UTF-16 character literal containing more than one character, escape sequence, or universal character name is ill-formed.

Символьный литерал, начинающийся с U префикса, является символьным литералом UTF-32. A character literal that begins with the U prefix is a UTF-32 character literal. Значение символьного литерала UTF-32, содержащего один символ, escape-последовательность или универсальное имя символа, имеет значение, равное значению кодовой точки ISO 10646. The value of a UTF-32 character literal containing a single character, escape sequence, or universal character name has a value equal to its ISO 10646 code point value. Символьный литерал в кодировке UTF-32, содержащий более одного символа, escape-последовательности или универсального имени символа, имеет неправильный формат. A UTF-32 character literal containing more than one character, escape sequence, or universal character name is ill-formed.

Escape-последовательности Escape sequences

Существует три вида escape-последовательностей: простая, восьмеричная и шестнадцатеричная. There are three kinds of escape sequences: simple, octal, and hexadecimal. Возможны следующие типы escape-последовательностей: Escape sequences may be any of the following:

Значение Value Escape-последовательность Escape sequence
новая строка newline \\n \n
обратная косая черта backslash \\
горизонтальная табуляция horizontal tab \t \t
вопросительный знак question mark ? ? или \? or \?
вертикальная табуляция vertical tab \3,3 \v
одинарная кавычка single quote \’ \’
стирание назад backspace \& \b
двойная кавычка double quote \» \»
возврат каретки carriage return \Cерверный \r
нуль-символ the null character \0 \0
перевод страницы form feed \ж \f
восьмеричный octal \OOO \ooo
оповещение (колокольчик) alert (bell) \конкретного \a
шестнадцатеричный hexadecimal \ксххх \xhhh

Восьмеричная escape-последовательность — это обратная косая черта, за которой следует последовательность из одной до трех восьмеричных цифр. An octal escape sequence is a backslash followed by a sequence of one to three octal digits. Восьмеричная escape-последовательность завершается на первом символе, который не является восьмеричной цифрой, если он встречается раньше, чем третья цифра. An octal escape sequence terminates at the first character that’s not an octal digit, if encountered sooner than the third digit. Наибольшее возможное восьмеричное значение \377 —. The highest possible octal value is \377 .

Шестнадцатеричная escape-последовательность — это обратная косая x черта, за которой следует символ, за которым следует последовательность из одной или нескольких шестнадцатеричных цифр. A hexadecimal escape sequence is a backslash followed by the character x , followed by a sequence of one or more hexadecimal digits. Начальные нули пропускаются. Leading zeroes are ignored. В обычном или U8 символьном литерале самое высокое шестнадцатеричное значение — 0xFF. In an ordinary or u8-prefixed character literal, the highest hexadecimal value is 0xFF. В расширенном символьном литерале с префиксом L или u максимальное шестнадцатеричное значение — 0xFFFF. In an L-prefixed or u-prefixed wide character literal, the highest hexadecimal value is 0xFFFF. В расширенном символьном литерале с префиксом U максимальное шестнадцатеричное значение — 0xFFFFFFFF. In a U-prefixed wide character literal, the highest hexadecimal value is 0xFFFFFFFF.

В этом примере кода показаны некоторые примеры экранированных символов с помощью обычных символьных литералов. This sample code shows some examples of escaped characters using ordinary character literals. Один и тот же синтаксис escape-последовательности допустим для других типов символьных литералов. The same escape sequence syntax is valid for the other character literal types.

Обратная косая\черта () — это символ продолжения строки, когда он помещается в конец строки. The backslash character (\) is a line-continuation character when it’s placed at the end of a line. Если символ обратной косой черты требуется использовать как символьный литерал, необходимо ввести две косые черты подряд ( \\ ). If you want a backslash character to appear as a character literal, you must type two backslashes in a row ( \\ ). Дополнительные сведения о символе продолжения строки см. в разделе Phases of Translation. For more information about the line continuation character, see Phases of Translation.

Специально для Майкрософт Microsoft specific

Чтобы создать значение из короткого многосимвольного литерала, компилятор преобразует символ или последовательность символов между одинарными кавычками в 8-битные значения в пределах 32-разрядного целого числа. To create a value from a narrow multicharacter literal, the compiler converts the character or character sequence between single quotes into 8-bit values within a 32-bit integer. Несколько символов в литерале заполняют соответствующие байты по мере необходимости от высокого до низкого порядка. Multiple characters in the literal fill corresponding bytes as needed from high-order to low-order. Затем компилятор преобразует целое число в целевой тип после обычных правил. The compiler then converts the integer to the destination type following the usual rules. Например, чтобы создать значение char , компилятор принимает младший байт. For example, to create a char value, the compiler takes the low-order byte. Чтобы создать значение wchar_t или char16_t , компилятор принимает слово низкого порядка. To create a wchar_t or char16_t value, the compiler takes the low-order word. Компилятор выдает предупреждение о том, что результат усекается, если какие-либо биты заданы выше назначенного байта или слова. The compiler warns that the result is truncated if any bits are set above the assigned byte or word.

Восьмеричная escape-последовательность, которая содержит более трех цифр, рассматривается как восьмеричная последовательность из 3 цифр, за которой следуют последующие цифры как символы в многосимвольном литерале, что может привести к неудивительному результату. An octal escape sequence that appears to contain more than three digits is treated as a 3-digit octal sequence, followed by the subsequent digits as characters in a multicharacter literal, which can give surprising results. Например: For example:

Escape-последовательности, которые содержат невосьмеричные символы, вычисляются в виде восьмеричной последовательности вплоть до последнего восьмеричного символа, за которыми следуют оставшиеся символы в виде последующих символов в многосимвольном литерале. Escape sequences that appear to contain non-octal characters are evaluated as an octal sequence up to the last octal character, followed by the remaining characters as the subsequent characters in a multicharacter literal. Предупреждение C4125 создается, если первый невосьмеричный символ является десятичной цифрой. Warning C4125 is generated if the first non-octal character is a decimal digit. Например: For example:

Восьмеричная escape-последовательность, которая имеет большее значение \377 , чем ошибка C2022: «значение-in-Decimal«: слишком большое для символа. An octal escape sequence that has a higher value than \377 causes error C2022: ‘value-in-decimal‘: too big for character.

Escape-последовательность, которая содержит шестнадцатеричные и нешестнадцатеричные символы, вычисляется как многосимвольный литерал, содержащий шестнадцатеричную escape-последовательность вплоть до последнего шестнадцатеричного символа, за которыми следуют нешестнадцатеричные символы. An escape sequence that appears to have hexadecimal and non-hexadecimal characters is evaluated as a multicharacter literal that contains a hexadecimal escape sequence up to the last hexadecimal character, followed by the non-hexadecimal characters. Шестнадцатеричная escape-последовательность, которая не содержит шестнадцатеричных цифр, приводит к ошибке компилятора C2153: «шестнадцатеричные литералы должны содержать по крайней мере одну шестнадцатеричную цифру». A hexadecimal escape sequence that contains no hexadecimal digits causes compiler error C2153: «hex literals must have at least one hex digit».

Если в расширенном символьном литерале L с префиксом содержится последовательность из множества символов, значение берется из первого символа, а компилятор выдает предупреждение C4066. If a wide character literal prefixed with L contains a multicharacter sequence, the value is taken from the first character, and the compiler raises warning C4066. Последующие символы игнорируются, в отличие от поведения эквивалентного обычного многосимвольного литерала. Subsequent characters are ignored, unlike the behavior of the equivalent ordinary multicharacter literal.

Завершение Microsoft для конкретных End Microsoft specific

Универсальные имена символов Universal character names

В символьных литералах и машинных (не являющихся необработанными) строковых литералах любой символ может быть представлен универсальным именем символа. In character literals and native (non-raw) string literals, any character may be represented by a universal character name. Универсальные имена символов формируются с помощью префикса \U , за которым следует 8-значная кодовая точка Юникода или префикс \u , за которым следует 4-значная кодовая точка Юникода. Universal character names are formed by a prefix \U followed by an eight-digit Unicode code point, or by a prefix \u followed by a four-digit Unicode code point. Все восемь или четыре знака, соответственно, должны присутствовать для создания корректного универсального имени символа. All eight or four digits, respectively, must be present to make a well-formed universal character name.

Суррогатные пары Surrogate Pairs

Универсальные имена символов не могут кодировать значения в суррогатном диапазоне кодовых точек D800-DFFF. Universal character names can’t encode values in the surrogate code point range D800-DFFF. Для суррогатных пар Юникода укажите универсальное имя символа, используя \UNNNNNNNN , где NNNNNNNN — восьмизначная кодовая точка для символа. For Unicode surrogate pairs, specify the universal character name by using \UNNNNNNNN , where NNNNNNNN is the eight-digit code point for the character. При необходимости компилятор создает суррогатную пару. The compiler generates a surrogate pair if necessary.

В C++03 языком допускалось, чтобы универсальными именами символов представлялось лишь определенное подмножество символов. Также могли существовать универсальные имена символов, не представляющие никаких допустимых символов Юникода. In C++03, the language only allowed a subset of characters to be represented by their universal character names, and allowed some universal character names that didn’t actually represent any valid Unicode characters. Эта ошибка была исправлена в стандарте C++ 11. This mistake was fixed in the C++11 standard. В C++11 в символьных и строковых литералах и идентификаторах можно использовать универсальные имена символов. In C++11, both character and string literals and identifiers can use universal character names. Дополнительные сведения об универсальных именах символов см. в разделе Character Sets. For more information on universal character names, see Character Sets. Дополнительные сведения о Юникоде см. в статье Unicode. For more information about Unicode, see Unicode. Дополнительные сведения о суррогатных парах см. в статье Surrogate Pairs and Supplementary Characters(Суррогатные пары и дополнительные символы). For more information about surrogate pairs, see Surrogate Pairs and Supplementary Characters.

Строковые литералы String literals

Строковый литерал представляет последовательность символов, которые вместе образуют строку с завершающим нулем. A string literal represents a sequence of characters that together form a null-terminated string. Символы должны быть заключены в двойные кавычки. The characters must be enclosed between double quotation marks. Существуют следующие типы строковых литералов. There are the following kinds of string literals:

Узкие строковые литералы Narrow string literals

Узким строковым литералом является нефиксированный, разделенный символами двойной кавычки массив типа const char[n] , где n — это длина массива в байтах. A narrow string literal is a non-prefixed, double-quote delimited, null-terminated array of type const char[n] , where n is the length of the array in bytes. Обычный строковый литерал может содержать любые графические символы, за исключением двойных кавычек ( » ), обратной косой черты ( \ ) или символа новой строки. A narrow string literal may contain any graphic character except the double quotation mark ( » ), backslash ( \ ), or newline character. Обычный строковый литерал также может содержать перечисленные выше escape-последовательности и универсальные имена символов, которые помещаются в байте. A narrow string literal may also contain the escape sequences listed above, and universal character names that fit in a byte.

Строки в кодировке UTF-8 UTF-8 encoded strings

Строка в кодировке UTF-8 — это U8 с двойной кавычкой, разделенный нулем массив типа const char[n] , где n — это длина закодированного массива в байтах. A UTF-8 encoded string is a u8-prefixed, double-quote delimited, null-terminated array of type const char[n] , where n is the length of the encoded array in bytes. Строковый литерал с префиксом u8 может содержать любые графические символы, за исключением двойных кавычек ( » ), обратной косой черты ( \ ) или символа новой строки. A u8-prefixed string literal may contain any graphic character except the double quotation mark ( » ), backslash ( \ ), or newline character. Строковый литерал с префиксом u8 может также содержать перечисленные выше escape-последовательности и любые универсальные имена символов. A u8-prefixed string literal may also contain the escape sequences listed above, and any universal character name.

Широкие строковые литералы Wide string literals

Широкий строковый литерал — это массив констант wchar_t , заканчивающийся нулем, который имеет префикс » L » и содержит любой графический символ, кроме двойных кавычек («), обратной косой черты (\) или символа новой строки. A wide string literal is a null-terminated array of constant wchar_t that is prefixed by ‘ L ‘ and contains any graphic character except the double quotation mark («), backslash (\), or newline character. Расширенный строковый литерал может содержать перечисленные выше escape-последовательности и любые универсальные имена символов. A wide string literal may contain the escape sequences listed above and any universal character name.

char16_t и char32_t (C++11) char16_t and char32_t (C++11)

В C++11 доступны символьные типы char16_t (портативный, 16-разрядный Юникод) и char32_t (32-разрядный Юникод): C++11 introduces the portable char16_t (16-bit Unicode) and char32_t (32-bit Unicode) character types:

Необработанные строковые литералы (C++ 11) Raw string literals (C++11)

Необработанный строковый литерал — это массив из любого символьного типа, заканчивающийся нулем, который содержит любой графический символ, включая двойные кавычки («),\обратную косую черту () или символ новой строки. A raw string literal is a null-terminated array—of any character type—that contains any graphic character, including the double quotation mark («), backslash (\), or newline character. Необработанные строковые литералы часто применяются в регулярных выражениях, которые используют классы символов, а также в строках HTML и XML. Raw string literals are often used in regular expressions that use character classes, and in HTML strings and XML strings. Примеры см. в следующей статье: Вопросы и ответы по Бьерном Страуструп на c++ 11. For examples, see the following article: Bjarne Stroustrup’s FAQ on C++11.

Разделитель — это определяемая пользователем последовательность длиной до 16 символов, которая непосредственно предшествует открывающей скобке необработанного строкового литерала и сразу после закрывающей скобки. A delimiter is a user-defined sequence of up to 16 characters that immediately precedes the opening parenthesis of a raw string literal, and immediately follows its closing parenthesis. Например, в R»abc(Hello»\()abc» последовательность разделителей — abc , а содержимое строки — Hello»\( . For example, in R»abc(Hello»\()abc» the delimiter sequence is abc and the string content is Hello»\( . Разделители можно использовать для различения необработанных строк, содержащих двойные кавычки и круглые скобки. You can use a delimiter to disambiguate raw strings that contain both double quotation marks and parentheses. Этот строковый литерал вызывает ошибку компилятора: This string literal causes a compiler error:

Однако ошибку можно устранить с помощью разделителя: But a delimiter resolves it:

Можно создать необработанный строковый литерал, содержащий символ новой строки (не экранированный символ) в источнике: You can construct a raw string literal that contains a newline (not the escaped character) in the source:

литералы std:: String (C++ 14) std::string literals (C++14)

std::string литералы являются реализациями определяемых пользователем литералов в стандартной библиотеке (см. ниже), которые представлены «xyz»s как ( s с суффиксом). std::string literals are Standard Library implementations of user-defined literals (see below) that are represented as «xyz»s (with a s suffix). Этот тип строкового литерала создает временный объект типа std::string std::u32string , std::wstring , или std::u16string , в зависимости от указанного префикса. This kind of string literal produces a temporary object of type std::string , std::wstring , std::u32string , or std::u16string , depending on the prefix that is specified. Если префикс не используется, std::string то создается. When no prefix is used, as above, a std::string is produced. L»xyz»s«std::wstring создает. L»xyz»s produces a std::wstring . u»xyz»s создает std:: u16stringи U»xyz»s создает std:: u32string. u»xyz»s produces a std::u16string, and U»xyz»s produces a std::u32string.

s Суффикс можно также использовать для необработанных строковых литералов: The s suffix may also be used on raw string literals:

std::string литералы определяются в пространстве имен std::literals::string_literals файле заголовка. std::string literals are defined in the namespace std::literals::string_literals in the header file. Поскольку std::literals::string_literals и std::literals объявляются как встроенные пространства имен, std::literals::string_literals автоматически считается напрямую принадлежащим пространству имен std . Because std::literals::string_literals , and std::literals are both declared as inline namespaces, std::literals::string_literals is automatically treated as if it belonged directly in namespace std .

Размер строковых литералов Size of string literals

Для строк char* ANSI и других однобайтовых кодировок (но не UTF-8) размер строкового литерала (в байтах) — это число символов плюс 1 для завершающего нуль-символа. For ANSI char* strings and other single-byte encodings (but not UTF-8), the size (in bytes) of a string literal is the number of characters plus 1 for the terminating null character. Для строк остальных типов размер напрямую не связан с количеством символов. For all other string types, the size is not strictly related to the number of characters. UTF-8 использует до четырех элементов char для кодирования некоторых единиц кода, а char16_t или wchar_t кодирования UTF-16 может использовать два элемента (всего четыре байта) для кодирования одной единицы кода. UTF-8 uses up to four char elements to encode some code units, and char16_t or wchar_t encoded as UTF-16 may use two elements (for a total of four bytes) to encode a single code unit. В примере ниже показан размер расширенного строкового литерала в байтах. This example shows the size of a wide string literal in bytes:

Обратите strlen() внимание wcslen() , что и не включайте размер завершающего нуль-символа, размер которого равен размеру элемента строкового типа char* : один байт в строке, два байта wchar_t* или char16_t* строки и четыре байт в char32_t* строках. Notice that strlen() and wcslen() don’t include the size of the terminating null character, whose size is equal to the element size of the string type: one byte on a char* string, two bytes on wchar_t* or char16_t* strings, and four bytes on char32_t* strings.

Максимальная длина строкового литерала составляет 65 535 байт. The maximum length of a string literal is 65,535 bytes. Это ограничение применимо как к узким, так и к расширенным строковым литералам. This limit applies to both narrow string literals and wide string literals.

Изменение строковых литералов Modifying string literals

Поскольку строковые литералы (не std::string включая литералы) являются константами, попытка их изменить, например str[2] = ‘A’ , приводит к ошибке компилятора. Because string literals (not including std::string literals) are constants, trying to modify them—for example, str[2] = ‘A’ —causes a compiler error.

Специально для Майкрософт Microsoft specific

В Microsoft C++можно использовать строковый литерал для инициализации указателя на неконстантный тип char или wchar_t. In Microsoft C++, you can use a string literal to initialize a pointer to non-const char or wchar_t. Эта неконстантная инициализация разрешена в коде C99, но не рекомендуется в C++ 98 и удалена в C++ 11. This non-const initialization is allowed in C99 code, but is deprecated in C++98 and removed in C++11. Попытка изменить строку вызовет нарушение прав доступа, как показано в следующем примере: An attempt to modify the string causes an access violation, as in this example:

Если задать параметр компилятора /Zc: strictStrings (отключить преобразование типа строкового литерала) , то при преобразовании строкового литерала в указатель неконстантного символа компилятор может выдать ошибку. You can cause the compiler to emit an error when a string literal is converted to a non-const character pointer when you set the /Zc:strictStrings (Disable string literal type conversion) compiler option. Рекомендуется использовать его для создания переносимого кода, соответствующего стандартам. We recommend it for standards-compliant portable code. Также рекомендуется использовать ключевое слово Auto для объявления инициализированных указателей строкового литерала, так как он разрешается в правильный (const) тип. It is also a good practice to use the auto keyword to declare string literal-initialized pointers, because it resolves to the correct (const) type. В следующем примере кода перехватывается во время компиляции попытка записать в строковый литерал: For example, this code example catches an attempt to write to a string literal at compile time:

В некоторых случаях идентичные строковые литералы могут быть объединены в пул для экономии места в исполняемом файле. In some cases, identical string literals may be pooled to save space in the executable file. При объединении строковых литералов в пулы компилятор делает так, что все ссылки на определенный строковый литерал указывают на одну и ту же область в памяти, вместо того чтобы каждая ссылка указывала на отдельный экземпляр строкового литерала. In string-literal pooling, the compiler causes all references to a particular string literal to point to the same location in memory, instead of having each reference point to a separate instance of the string literal. Для включения объединения строковых литералов в пулы используется параметр компилятора /GF . To enable string pooling, use the /GF compiler option.

Завершение Microsoft для конкретных End Microsoft specific

Сцепление смежных строковых литералов Concatenating adjacent string literals

Все смежные расширенные и узкие строковые литералы соединяются. Adjacent wide or narrow string literals are concatenated. Данное объявление: This declaration:

идентично следующему объявлению: is identical to this declaration:

и следующему объявлению: and to this declaration:

Использование внедренных шестнадцатеричных escape-кодов для задания строковых литералов может привести к непредвиденным результатам. Using embedded hexadecimal escape codes to specify string literals can cause unexpected results. В следующем примере выполняется попытка создать строковый литерал, содержащий символ ASCII 5, за которым следуют символы f, i, v и e: The following example seeks to create a string literal that contains the ASCII 5 character, followed by the characters f, i, v, and e:

Фактический результат (шестнадцатеричное значение 5F) является кодом ASCII для символа подчеркивания, за которым следуют символы i, v и e. The actual result is a hexadecimal 5F, which is the ASCII code for an underscore, followed by the characters i, v, and e. Чтобы получить правильный результат, можно воспользоваться одним из следующих способов: To get the correct result, you can use one of these:

std::string литералы, так как они std::string являются типами, могут быть объединены + с оператором, который определен для типов basic_string . std::string literals, because they are std::string types, can be concatenated with the + operator that is defined for basic_string types. Эти литералы также можно соединить аналогично смежным строковым литералам. They can also be concatenated in the same way as adjacent string literals. В обоих случаях кодировка строки и суффикс должны совпадать: In both cases, the string encoding and the suffix must match:

Строковые литералы с универсальными именами символов String literals with universal character names

Машинные (не являющиеся необработанными) строковые литералы могут использовать универсальные имена символов для представления любого символа, при условии что универсальные имена можно кодировать как один или несколько символов в строковом типе. Native (non-raw) string literals may use universal character names to represent any character, as long as the universal character name can be encoded as one or more characters in the string type. Например, универсальное имя символа, представляющее символ национального алфавита, не может быть закодировано в строку обычных символов с помощью кодовой страницы ANSI. Тем не менее его можно закодировать в строку обычных символов в некоторых многобайтовых кодовых страницах, в строках UTF-8 или в двухбайтовой строке. For example, a universal character name representing an extended character cannot be encoded in a narrow string using the ANSI code page, but it can be encoded in narrow strings in some multi-byte code pages, or in UTF-8 strings, or in a wide string. В c++ 11 Поддержка Юникода расширена с помощью char16_t* строковых типов и. char32_t* In C++11, Unicode support is extended by the char16_t* and char32_t* string types:

Символы в с++ — Помогите плиз в с++ вывести символы

Будем жить, Маэстро.

Сообщения: 6695
Благодарности: 1392

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

Конфигурация компьютера
Материнская плата: ABIT IS7-E2 i865PE+ICH5, S-478 VC 6ch SB Lan ATX 2 DDR 400
HDD: SAMSUNG HD103SJ (1000 Гб, SATA)
Звук: Интегрированный звук
CD/DVD: LG DVD-RW, GSA-H30N RBBB (SATA)
ОС: Windows XP Professional (SP-3) Russian. Special Edition XP

Сообщения: 390
Благодарности: 13

Сообщения: 1108
Благодарности: 138

Такой вопрос (про кодировки) здесь возникает регулярно. Смотрим хотя бы здесь:

Сообщения: 390
Благодарности: 13

Если Вы про консольный режим, то:
1. Откройте исходник
2. File -> Advanced Save Options -> Encoding -> Cyrillic (DOS) — Codepage 866 »

вот мне интересно можно ли изменить кодировку ни в самой программе а в програмной среде Microsoft Visual C++ 6.0??

Да и все коды что указаны там уже устарели((

Будем жить, Маэстро.

Сообщения: 6695
Благодарности: 1392

Цукерберг рекомендует:  Используем эффект Hover для кнопок
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих
Конфигурация компьютера
Материнская плата: ABIT IS7-E2 i865PE+ICH5, S-478 VC 6ch SB Lan ATX 2 DDR 400
HDD: SAMSUNG HD103SJ (1000 Гб, SATA)
Звук: Интегрированный звук
CD/DVD: LG DVD-RW, GSA-H30N RBBB (SATA)
ОС: Windows XP Professional (SP-3) Russian. Special Edition XP