在C ++中将单个字符转换为小写 - tolower返回一个整数

时间:2015-11-21 23:00:00

标签: c++ string char lowercase tolower

我试图将字符串转换为小写,并将其视为char *并迭代每个索引。问题是我在网上读到的tolower函数实际上并没有将char转换为小写:它将char作为输入并返回一个整数。

cout << tolower('T') << endl;
当应该打印116时,

T打印到控制台。

我有更好的方法将字符串转换为小写吗? 我在网上浏览过,大多数消息来源都说&#34;使用tolower并遍历char数组&#34; ,这似乎不是为我工作。

所以我的两个问题是:

  1. tolower功能使我返回116而不是&#39; t&#39;当我致电tolower('T')

  2. 除了在每个角色上使用tolower之外,还有更好的方法可以将字符串转换为C ++中的小写字母吗?

6 个答案:

答案 0 :(得分:10)

那是因为有两种不同的tolower功能。您正在使用的是this one,它返回int。这就是为什么它打印116.这是't'的ASCII值。如果您要打印char,只需将其转回char

或者,您可以使用this one,它实际上会返回您希望它返回的类型:

std::cout << std::tolower('T', std::locale()); // prints t

回答你的第二个问题:

  

除了在每个角色上使用tolower之外,是否有更好的方法将字符串转换为C ++中的小写?

不。

答案 1 :(得分:2)

116确实是正确的值,但这仅仅是std::cout如何处理整数的问题,使用char(tolower(c))来实现您想要的结果

std::cout << char(tolower('T')); // print it like this

答案 2 :(得分:2)

它甚至更奇怪 - 需要int并返回int。请参阅http://en.cppreference.com/w/cpp/string/byte/tolower

您需要确保传递的值可以表示为unsigned char - 不允许使用负值,即使char已签名。

所以你最终会得到这样的东西:

char c = static_cast<char>(tolower(static_cast<unsigned char>('T')));
丑陋不是吗?但无论如何,一次转换一个角色是非常有限的。例如,尝试将'ß'转换为大写。

答案 3 :(得分:1)

要降低为int,则返回int。如果检查#include <ctype>,您将看到该定义为int tolower ( int c );您可以使用循环来转换字符串并将每个字符更改为lowe case。例如

while (str[i]) // going trough string 
{
  c=str[i]; // ging c value of current char in string 
  putchar (tolower(c)); // changing to lower case      
  i++;  //incrementing 
}

答案 4 :(得分:1)

int to_lower(int ch)强制要求ch的文档必须可以表示为unsigned char或必须等于EOF通常 -1,但是不要依赖那个。)

从c标准库继承的字符操作函数以int的形式工作并不罕见。这有两个原因:

  1. 在C的早期,所有参数都被提升为int(函数原型不存在)。

  2. 为了保持一致性,这些函数需要处理EOF情况,由于显而易见的原因,它不能成为char可表示的值,因为这意味着我们必须丢失其中一个合法编码。一个角色。

  3. http://en.cppreference.com/w/cpp/string/byte/tolower

    答案是在打印前将结果转换为char。

    e.g:

    std::cout << static_cast<char>(std::to_lower('A'));
    

答案 5 :(得分:0)

通常来说,要将大写字母转换为小写字母,只需在大写字母上添加32,因为此数字是小写字母和大写字母之间的ASCII码差异,例如'a'-'A'=97-67=32

char c = 'B';
c += 32; // c is now 'b'
printf("c=%c\n", c);

另一种简便的方法是先将大写字符映射到英文字母0-25范围内的偏移量,即'a'为索引'0','z'为索引'25',然后重新映射变成小写字母。

char c = 'B';
c = c - 'A' + 'a'; // c is now 'b'
printf("c=%c\n", c);