这大小写怎么转换的?

img


不是很清楚ASCII码中的大小写字母转换,为什么这样可以讲大写字母变成小写字母,实在是搞不懂


#include <iostream>
using namespace std;
int main()
{
 string s;
 cout << "请输入一个字符串:" << endl;
 cin >> s;
 for (int i = 0; i < s.length(); i++)
 {
  if (s[i] >= 'A' && s[i] <= 'Z') //判断是否是大写的
  {
   s[i] = s[i] + 32;      //大小写相差32          
  }
  else if (s[i] >= 'a' && s[i] <= 'z') //判断是否是小写 的
  {
   s[i] = s[i] - 32;
  }
 }
 cout << "改变后的数据为:" << endl;
 for (int i = 0; i < s.length(); i++)
 {
  cout << s[i];
 }
 return 0;
}

因为在ASCII码中,每个字符都对应一个数字:http://c.biancheng.net/c/ascii/
小写字母转换为大写字母的方法是将小写字母的ASCII码值减去32
那么同理大转小就是加上32

可参考:https://www.php.cn/csharp-article-459399.html

img

因为大写字母的ASCII码比小写字母的ASCII码值小32。
比如 :a -> A
a的ASCII码值是:65
A的ASCII码值是:97

这是基于ASCII码中的大小写字母的编码规则来实现的。
了解了ASCII码的原理就很容易理解这个解题方法。
ASCII码编码规则中A-Z对应65-90,a-z对应97-122,都是顺序的。每个字母大小写之间的差值都是固定的。
所以'a'-'A'可以得到这个固定差值。