我正在编写一个程序,要求输入字母,并根据输入对字母和事件进行排序。我在我的代码的末尾,我试图将大写字母转换为小写。我正在尝试这样做:
cout << tolower(char('A'+i)) << " " << alphabets[i] <<endl;
但tolower()
输出一个数字而不是字母的小写版本?例如,输入"aaaa"
给了我:
97 4
并输入"bbbbb"
给了我:
98 5
但是,当我取出tolower
时,"aaa"
之类的输入将是:
A 3
我不明白为什么会这样。
答案 0 :(得分:3)
tolower
是一个古老的函数,继承自1970年代的C,在函数签名可靠存在之前,人们真正关心表达式的不同整数类型之前。
因此,它会忽略类型并返回int
中的字符。三种选择:
static_cast< char >( std::tolower( 'A' + i ) )
。char lower = std::tolower( 'A' + i );
std::tolower( 'A', std::locale() )
。答案 1 :(得分:1)
tolower
都接受并返回一个int,而std::cout
无法知道返回的int
代表char
值。您可以转换为char
:
cout << static_cast<unsigned char>(tolower(char('A'+i)))
<< " " << alphabets[i] << endl;
答案 2 :(得分:0)
简单的类型转换可以解决此问题。例如:
char letter = 'J';
cout << char(tolower(letter)) << endl;