# 转换成小写字母(709)

# 题目

实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

# 示例

输入: "Hello" 输出: "hello"

# 算法

# ASCII码

export const toLowerCase = (str) => {
	return str
		.split("")
		.map((t) => (t.charCodeAt() >= 65 && t.charCodeAt() <= 90 ? String.fromCodePoint(t.charCodeAt() + 32) : t))
		.join("");
};
1
2
3
4
5
6

# ASCII码表中的数字字母位置

  • A-Z: 65 - 90
  • a-z: 97 - 122
  • 0-9: 48 - 57

# 正则

export const toLowerCase = (str) => {
	return str.replaceAll(/[A-Z]/g, (t) => String.fromCodePoint(t.charCodeAt() + 32));
};
1
2
3

# 位运算

方法类似于第一个,只是使用了位运算代替加法

大写字母A的ASCII码是65,二进制是0100 0001,计算65 | 32 = 0100 0001 | 0010 0000 = 0110 0001 = 97,得到小写字母a的ASCII码

export const toLowerCase = (str) => {
	return str
		.split("")
		.map((t) => String.fromCodePoint(t.charCodeAt() | 32))
		.join("");
};
1
2
3
4
5
6

# 其他使用位运算的技巧

  • 全部转换大写:&33
  • 全部转换小写:|32
  • 大小写互相转换:^32