for循环c ++'toupper'实现

时间:2015-06-14 22:37:50

标签: c++ toupper

有人可以解释为什么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编程。

3 个答案:

答案 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() 返回整数值