Вывести ASCII-значение символа

#include <iostream>

using namespace std;

int main()
{
char x;
cout << "enter a character:";
cin >> x;
cout << "ASCII Value of " << x << "is" << string(x);
return 0 ;
}

ошибка

main.cpp||In function 'int main()':|
main.cpp|10|error: invalid conversion from 'char' to 'const char*'|
main.cpp|10|error:   initializing argument 1 of 'std::basic_string<_CharT, _Traits,_Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'|
||=== Build finished: 2 errors, 0 warnings ===|

-8

Решение

std::cout << "ASCII Value of " << x << "is" << (int)x;

является одним из способов (бросок обходит специальное лечение char введите библиотеку потока ввода-вывода), но при этом будет выведено закодированное на вашей платформе значение символа, которое не обязательно ASCII.

Переносимое решение намного сложнее: вам нужно закодировать набор ASCII в 128-элементном массиве элементов, способных хранить 7-битное значение без знака, и отобразить x к подходящему элементу этого.

3

Другие решения

Есть 3 подхода к решению этой проблемы:

  • использование to_string
  • Передавая правильное значение cout
  • С использованием std::string класс правильно

Решения помечены (цифры в комментариях).


использование std::to_string

Начиная с C ++ 11, есть функция для преобразования чисел в строку (нанизывать):

/*(1)*/        std::cout << std::to_string( x );

Там нет специализации для char параметр. Таким образом, значение неявно преобразуется.


Передавая правильное значение cout

cout будет отображать значение char объект как персонаж.
Если мы хотим вывести значение char объект, нам нужно преобразовать его в тип, который выводится cout как число вместо символа.

Стандарт C ++ гарантирует:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

Таким образом, можно использовать любой из этих целочисленных типов. Обычно int выбран.

Здесь можно использовать 4 преобразования:

1) неявный — «Неявные преобразования выполняются всякий раз, когда выражение некоторого типа T1 используется в контексте, которое не принимает этот тип, но принимает некоторый другой тип T2;»

/*(2)*/        int i = x;
std::cout << i;

2) Явный — «Преобразует между типами, используя комбинацию явных и неявных преобразований».

/*(3)*/        std::cout << (int)x;

/*(4)*/        std::cout << int(x); // unsigned int(x) - is invalid,
// has to be a single-word type name

3) именованный актерский состав.

/*(5)*/        std::cout << static_cast<int>(x);

4) Используйте T{e} обозначение для строительства

/*(6)*/        std::cout << int{x};

T{e} Синтаксис конструкции делает явным, что конструкция желательна. T{e} синтаксис конструкции не допускает сужения. T{e} является единственным безопасным и общим выражением для построения значения типа T из выражения e. Нотации бросков T(e) а также (T)e не являются ни безопасными, ни общими.

О преобразованиях Основные положения C ++ указывает следующее (среди прочих)

В этом случае я бы предложил (3) или (4).


С использованием std::string класс правильно

string это специализация basic_string

using string = basic_string<char>;

basic_string имеет много конструкторы.

Есть только 2 конструктора, которые могут принимать заранее определенное количество символов;

basic_string( size_type count, CharT ch, const Allocator& alloc = Allocator() );

Создает строку с количеством копий символа ch. Поведение не определено, если count> = npos.

/*(7)*/        std::string s = std::string( 1, x );

basic_string( const CharT* s, size_type count, const Allocator& alloc = Allocator() );

Создает строку с первым количеством символов строки символов, на которые указывает s. s может содержать нулевые символы. Длина строки считается. Поведение не определено, если s не указывает на массив из по крайней мере элементов count CharT, включая случай, когда s является нулевым указателем.

/*(8)*/        std::string s = std::string( &x, 1 );
0

#include <iostream>

using namespace std;

int main()
{
char x;
cout<< "enter a character:";
cin>>x;
cout<< "ASCII Value of "<< x<< "is"<< int(x);
return 0 ;
}

вы имеете в виду возврат попробовать этот код

-2

#include <iostream>

using namespace std;

int main()
{
char x;
cout<< "enter a character:";
cin>>x;
cout<< "ASCII Value of "<< x<< "is"<< char(x);
return 0 ;
}

попробуйте это называется возврат

-3
По вопросам рекламы [email protected]