Может кто-нибудь объяснить, почему этот короткий код в C ++ не дает ожидаемого результата.
Код должен печатать строку заглавными буквами.
#include <iostream>
#include <string>
using namespace std;
int main(){
string sample("hi, i like cats and dogs.");
cout << "small: " << sample << endl << "BIG : ";
for(char c: sample)
cout << toupper(c);
cout<<endl;
return 0;
}
Вывод вышеуказанной программы:
small: hi, i like cats and dogs.
BIG : 72734432733276737569326765848332657868326879718346
но я ожидал:
small: hi, i like cats and dogs.
BIG : HI, I LIKE CATS AND DOGS.
Я программировал только на Python.
toupper
возвращается int
, Вам нужно привести приведенное значение к char
такой, что оператор выходного потока <<
печатает символ, а не его числовое значение.
Вы также должны привести unsigned char
, чтобы покрыть случай, когда char
подписан, и ваш набор символов содержит отрицательные числа (это будет вызывать неопределенное поведение в toupper
). Например,
cout << static_cast<char>(toupper(static_cast<unsigned char>(c)));
Обратите внимание, что вам нужно включить соответствующий заголовок (cctype
если ты хочешь std::toupper
или же ctype.h
если ты хочешь С toupper
.)
Это печать значений ASCII, которые являются целыми числами. Я согласен с @Captain Obvlious.