for 循环 c++ 'toupper' 实现

for loop c++ 'toupper' implementation

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

toupperreturns int。您需要将 return 值转换为 char,以便输出流运算符 << 打印出字符而不是其数值。

您还应该将输入转换为 unsigned char,以涵盖 char 已签名且您的字符集包含负数的情况(这将调用 未定义的行为toupper 中)。例如,

cout << static_cast<char>(toupper(static_cast<unsigned char>(c)));

请注意,您需要包括相关的 header(cctype 如果您想要 std::toupperctype.h 如果您想要 C 的 toupper。)

它打印的是整数的 ASCII 值。我同意@Captain Obvlious。

#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() return 整数值