Вмъкване на знак £ в изходен низ в C++

Имам следния код:

cout << "String that includes a £ sign";

Знакът £ обаче не се разпознава от компилатора и вместо това се показва u с ударение. Мога да вмъкна такъв, като използвам следния метод:

cout << "String that includes a " << char(156) << " sign";

където 156 е ASCII кодът на знака £. Има ли начин да включа този ASCII код в самия низ, без да се налага да го отделям по този начин? Например:

cout << "String that includes a <some way of iserting the £ sign> sign";

person Community    schedule 30.09.2010    source източник


Отговори (4)


£ няма "ASCII код" - ASCII е 7 бита (0..127). Има различни разширени набори от 8 битови знаци, които включват £, но няма единен стандарт за това и символът £ може да има различни различни стойности в различни среди. Вероятно трябва да използвате Unicode, ако имате нужда от международни символи с максимална преносимост.

person Paul R    schedule 30.09.2010
comment
да Въпреки това, можете да опитате std::wcout << L"String that includes a £ sign";. В зависимост от вашата платформа това може да работи. - person sbi; 30.09.2010
comment
За уточнение. В Visual Studio: Project -› Properties -›Configuration Properties -› General -› Промяна на набора от символи от Use Multi-Byte Character Set To Use Unicode Character Set - person AndyG; 30.09.2010

Можете да използвате екраниращата последователност \x, за да вмъкнете знак с неговия шестнадесетичен код. В твоя случай

cout << "String that includes a \x9C sign";

Както казва Пол, това просто извежда символ с код 156, но не дава гаранция, че това всъщност е знакът за паунд в различни системи.

person Carvellis    schedule 30.09.2010

ASCII дефинира само знаци до 127. (8-мият бит беше предназначен за паритет, който беше необходим за шумната преносна линия от 60-те години на миналия век, когато беше проектиран ASCII) Освен това, знаците варират според кодовата страница и шрифта. Има несъответствие между шрифта, използван от редактора, който използвате, за да напишете вашия C++ код, и шрифта, използван от това, което показва изхода.

И така, трябва да покажете знак 156, за да покажете £ на вашето изходно устройство. Можете изрично да въведете знак 156 на компютър с WIndows, като задържите натиснат клавиша Alt и натиснете "0159" на цифровия бутон. Като алтернатива можете да използвате код на символа в низа в шестнадесетичен формат:

 cout << "String that includes a \x9C sign"; 
person James Curran    schedule 30.09.2010

Опитвах се да отговоря на същия въпрос в C.

Един от отговорите в Показване на широки символи с printf дава ключ към евентуално по-стабилен метод. Когато използвате редактора Code::Blocks, нито \x9C, нито \xA5 работят. Това може да се дължи на локалния POSIX по подразбиране, зададен за конзолния му изход, това е само ASCII, така че никакви символи над \x7f не работят. За да зададем локал на UTF-8, можем да използваме setlocale(LC_ALL,"").

#include <stdio.h>
#include <locale.h>

int main() {
    setlocale(LC_ALL,"");
    printf("%lc",163);
} 
 

В C++ можем да използваме

setlocale(LC_ALL,"");
cout << char(163) << 123.45 << endl;

С набор от локали на UTF-8 трябва да преобразуваме уникод символа \x9c в двубайтовото UFT-8 кодиране. Което е \xc2a3. Така

printf("\xc2a3%.2f",123.456);
person Salix alba    schedule 11.11.2020