方法1:使用标准库函数 tolower()
C标准库提供了 tolower() 函数(在 <ctype.h> 中定义),可以直接将字符转换为小写。

(图片来源网络,侵删)
#include <stdio.h>
#include <ctype.h>
int main() {
char upper = 'A';
char lower = tolower(upper); // 转换为小写 'a'
printf("Original: %c, Lowercase: %c\n", upper, lower);
return 0;
}
注意:tolower() 只对大写字母有效,非字母字符会原样返回。
方法2:手动转换(利用ASCII码)
在ASCII编码中:
- 大写字母
'A'~'Z'的范围是65~90。 - 小写字母
'a'~'z'的范围是97~122。 - 大写字母和小写字母的差值是
32('A' - 'a' = 32)。
可以通过加上 32 来转换大写字母:
#include <stdio.h>
char to_lower(char c) {
if (c >= 'A' && c <= 'Z') {
return c + 32;
}
return c; // 非大写字母原样返回
}
int main() {
char upper = 'Z';
char lower = to_lower(upper); // 转换为小写 'z'
printf("Original: %c, Lowercase: %c\n", upper, lower);
return 0;
}
方法3:使用位运算(仅适用于ASCII)
由于大写字母和小写字母在ASCII中只有第5位(从0开始计数)不同,可以通过异或操作快速转换:

(图片来源网络,侵删)
- 大写字母转小写:
c | 0x20(将第5位置为1)。 - 小写字母转大写:
c & ~0x20(将第5位置为0)。
#include <stdio.h>
char to_lower_bitwise(char c) {
return c | 0x20; // 转换为小写
}
int main() {
char upper = 'M';
char lower = to_lower_bitwise(upper); // 转换为小写 'm'
printf("Original: %c, Lowercase: %c\n", upper, lower);
return 0;
}
方法4:处理字符串(批量转换)
如果需要转换整个字符串(例如用户输入的字符串),可以遍历字符串并逐个字符转换:
#include <stdio.h>
#include <ctype.h>
void string_to_lower(char *str) {
for (int i = 0; str[i] != '\0'; i++) {
str[i] = tolower(str[i]);
}
}
int main() {
char text[] = "Hello World!";
string_to_lower(text);
printf("Lowercase: %s\n", text); // 输出: "hello world!"
return 0;
}
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
tolower() |
单个字符或字符串 | 简单、标准 | 依赖 <ctype.h> |
| 手动转换 | 学习底层原理 | 不依赖库 | 需要处理非字母字符 |
| 位运算 | 高性能场景 | 极快 | 仅适用于ASCII |
| 遍历字符串 | 批量转换 | 直接修改原字符串 | 需要额外函数 |
推荐优先使用 tolower(),因为它可读性强且符合标准,如果需要极致性能(如嵌入式系统),可考虑位运算方法。

(图片来源网络,侵删)
