Печать символа после добавления в виде строки в C ++ - PullRequest
3 голосов
/ 12 марта 2020

Я пытаюсь напечатать 'd' как строку в C ++.

string s = to_string((char)('a'+ 3));

cout << s << endl;

Ожидаемый результат: "d"

Фактический результат: "100"

Я не могу понять это поведение. Любая помощь будет высоко ценится.

Ответы [ 2 ]

7 голосов
/ 12 марта 2020

std::to_string - это функция для преобразования целых или значений с плавающей запятой в строки. Вы не должны использовать его в этой ситуации.

Используйте просто

std::cout << 'a' + 3 << std::endl;

Или

char c = 'a' + 3;
std::cout << c << std::endl;

Или, если вы действительно хотите сохранить результат в виде строки:

std::string s = std::string{'a' + 3};
std::cout << s << std::endl;
5 голосов
/ 12 марта 2020

Что вам нужно, это

std::string s( 1, 'a'+ 3 );

или

std::string s;
s +=  'a'+ 3;

или, например,

std::string s( 1, 'a' );
s.back() +=  3;

(есть несколько способов получить ожидаемый результат)

Что касается этого объявления

string s = to_string((char)('a'+ 3));

, то выражение (char) ('a' + 3) неявно преобразуется в тип int (из-за интегральных повышений и типа аргумент выбранной перегруженной функции std :: to_string), который представляется в виде строки после вызова std :: to_string ..

...