tolower()返回一个数字而不是小写形式?

时间:2015-05-12 05:48:36

标签: c++ tolower

我正在编写一个程序,要求输入字母,并根据输入对字母和事件进行排序。我在我的代码的末尾,我试图将大写字母转换为小写。我正在尝试这样做:

cout << tolower(char('A'+i)) << " " << alphabets[i] <<endl;

tolower()输出一个数字而不是字母的小写版本?例如,输入"aaaa"给了我:

  

97 4

并输入"bbbbb"给了我:

  

98 5

但是,当我取出tolower时,"aaa"之类的输入将是:

  

A 3

我不明白为什么会这样。

3 个答案:

答案 0 :(得分:3)

tolower是一个古老的函数,继承自1970年代的C,在函数签名可靠存在之前,人们真正关心表达式的不同整数类型之前。

因此,它会忽略类型并返回int中的字符。三种选择:

  1. 演员:static_cast< char >( std::tolower( 'A' + i ) )
  2. 使用变量:char lower = std::tolower( 'A' + i );
  3. 使用newer overloadstd::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;