0

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

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

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

97 4

输入"bbbbb"给了我:

98 5

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

一个 3

我不明白为什么会这样。

4

3 回答 3

4

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() )
于 2015-05-12T05:53:34.660 回答
1

tolower两者都接受并返回一个 int,并且std::cout无法知道int返回的代表一个char值。您可以通过转换为来解决此问题char

cout << static_cast<unsigned char>(tolower(char('A'+i))) 
     << " " << alphabets[i] << endl;
于 2015-05-12T05:51:38.107 回答
0

一个简单的类型转换可以解决这个问题。例如:

char letter = 'J';
cout << char(tolower(letter)) << endl;
于 2020-10-10T10:04:03.603 回答