for loop c++ 'toupper' implementation -
can explain why short code in c++ doesn't produce expected output. code supposed print string in capital letters.
#include <iostream> #include <string> using namespace std; int main(){ string sample("hi, cats , dogs."); cout << "small: " << sample << endl << "big : "; for(char c: sample) cout << toupper(c); cout<<endl; return 0; }
the output of above program is:
small: hi, cats , dogs. big : 72734432733276737569326765848332657868326879718346
but expected:
small: hi, cats , dogs. big : hi, cats , dogs.
i've programmed in python.
toupper
returns int
. need cast return value char
such output stream operator <<
prints out character , not numeric value.
you should cast input unsigned char
, cover case char
signed , character set includes negative numbers (this invoke undefined behaviour in toupper
). example,
cout << static_cast<char>(toupper(static_cast<unsigned char>(c)));
note need include relevant header (cctype
if want std::toupper
or ctype.h
if want c's toupper
.)
Comments
Post a Comment