有人可以解释为什么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编程。
答案 0 :(得分:8)
toupper
返回int
。您需要将返回值强制转换为char
,以便输出流运算符<<
打印出字符而不是其数字值。
您还应该将输入转换为unsigned char
,以涵盖char
已签名并且您的字符集包含负数的情况(这会在{中调用未定义的行为) {1}})。例如,
toupper
请注意,如果您需要cout << static_cast<char>(toupper(static_cast<unsigned char>(c)));
,则需要包含相关标题(cctype
;如果您想要C std::toupper
,则需要ctype.h
。)
答案 1 :(得分:0)
它打印整数的ASCII值。我同意@Captain Obvlious。
答案 2 :(得分:0)
#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 << (char)toupper(c);
cout<<endl;
return 0;
}
// toupper() 返回整数值