#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 ===|
std::cout << "ASCII Value of " << x << "is" << (int)x;
является одним из способов (бросок обходит специальное лечение char
введите библиотеку потока ввода-вывода), но при этом будет выведено закодированное на вашей платформе значение символа, которое не обязательно ASCII.
Переносимое решение намного сложнее: вам нужно закодировать набор ASCII в 128-элементном массиве элементов, способных хранить 7-битное значение без знака, и отобразить x
к подходящему элементу этого.
Есть 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 ++ указывает следующее (среди прочих)
T{e}
обозначение для строительстваВ этом случае я бы предложил (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 );
#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 ;
}
вы имеете в виду возврат попробовать этот код
#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 ;
}
попробуйте это называется возврат