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。
toupper
returns int
。您需要将 return 值转换为 char
,以便输出流运算符 <<
打印出字符而不是其数值。
您还应该将输入转换为 unsigned char
,以涵盖 char
已签名且您的字符集包含负数的情况(这将调用 未定义的行为 在 toupper
中)。例如,
cout << static_cast<char>(toupper(static_cast<unsigned char>(c)));
请注意,您需要包括相关的 header(cctype
如果您想要 std::toupper
或 ctype.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 整数值
有人可以解释一下为什么 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
returns int
。您需要将 return 值转换为 char
,以便输出流运算符 <<
打印出字符而不是其数值。
您还应该将输入转换为 unsigned char
,以涵盖 char
已签名且您的字符集包含负数的情况(这将调用 未定义的行为 在 toupper
中)。例如,
cout << static_cast<char>(toupper(static_cast<unsigned char>(c)));
请注意,您需要包括相关的 header(cctype
如果您想要 std::toupper
或 ctype.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 整数值