C++位运算完成ASCII码英文字母大小写转换

来源:互联网 发布:数控外圆磨床怎么编程 编辑:程序博客网 时间:2024/05/20 00:50

        C++的位运算是很基础的一个内容。课本,C++ Primer,王爽的汇编语言和编程之美(只看过一点)上都提到了位运算。就个人使用而言,以前只用位运算写过很基础的状态压缩,而王爽的书里讲到了如何使用位运算来完成大小写转换。

        这个简单的例子让我直观感受到位运算提供了一个看待问题的新角度,这是以前我体会不深的。

        现将书中的讲解概括如下:

        我们要将两个字符串分别改为全大写和全小写,而当时读者并不知道怎么用汇编判断一个字符的大小写。通过观察,发现大写字母的ASCII码和其对应的小写字母的ASCII码之间的差值是固定的,那么这个固定的差值反映到ASCII码值对应的二进制表示上,就是所有大写字母的二进制第六位(从1开始计数,从右往左数)是0,而小写字母是1。这样一来,就可以很方便地使用位运算来完成这个工作。

        下面给出C++实现:

#include <iostream>#include <string>using namespace std;string s1 = "BaSiC",//将s1中的字母全部改为小写s2 = "iNfOrMatiOn";//将s2中的字母全部改为大写int main() {for (int i = 0;i < s1.size();++i)//C++14支持二进制字面值,可以用等值整数代替s1[i] |= 0b100000;cout << s1 << "\n";for (int i = 0;i < s2.size();++i)s2[i] &= 0b11011111;//在&操作时,注意将前面的1补齐,不然默认是0cout << s2 << "\n";return 0;}


0 0