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

tolower() is returning a number instead of a the lowercase form?

本文关键字:数字 返回 一个 Tolower      更新时间:2023-10-16

我正在编写一个程序,该程序要求输入字母,并根据输入将字母和出现分组。我正处于代码末尾,我正在尝试将大写字母转换为小写。我正在尝试这样做:

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

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

97 4

和输入"bbbbb"给了我:

98 5

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

3

我不明白为什么会发生这种情况。

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

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

  1. 演员: static_cast< char >( std::tolower( 'A' + i ) )
  2. 使用变量:char lower = std::tolower( 'A' + i );
  3. 使用较新的过载:std::tolower( 'A', std::locale() )

tolower均接受并返回int, std::cout不知道返回的 int代表 char值。您可以通过转换为char来解决此问题:

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

一个简单的打字将解决此问题。例如:

char letter = 'J';
cout << char(tolower(letter)) << endl;