一个简单的转换字母大小写的方法

【这里我们将要介绍一个最简单也最快速的转换字母大小写的方法,提示:使用位技巧】

【以下代码用C语言编写】

在编程的时候我们经常遇到需要转换字母大小写的情况,有时候就是这个问题,有时候是为了解决其它问题。大家应该能想到一些方法。我将要介绍一种最优美的方法,也就是用比特技巧解决问题。

这个技巧非常简单,就是用大小写字母的ASCII值来转换他们(大小写字母ASCII值相差32)。将字母的ASCII值的第5位(或者第6位,取决于你怎么数)进行异或运算,看下面:

a = 01100001
A = 01000001

看到了吧,只有第5位发生了变化。

为什么会这样呢?也许是发明ASCII的人认为这是好主意。如果你把a~z的ASCII值写下来,你会发现,所有第5比特的值都是1。于是发明的人就想:那为什么不把A~Z的ASCII值的第5位都设为0呢?这样我们转换大小写就容易多了,于是就这样了吧。

a = 01100001    A = 01000001
b = 01100010    B = 01000010
c = 01100011    C = 01000011
d = 01100100    D = 01000100
e = 01100101    E = 01000101
f = 01100110    F = 01000110
g = 01100111    G = 01000111
h = 01101000    H = 01001000
i = 01101001    I = 01001001
j = 01101010    J = 01001010
k = 01101011    K = 01001011
l = 01101100    L = 01001100
m = 01101101    M = 01001101
n = 01101110    N = 01001110
o = 01101111    O = 01001111
p = 01110000    P = 01010000
q = 01110001    Q = 01010001
r = 01110010    R = 01010010
s = 01110011    S = 01010011
t = 01110100    T = 01010100
u = 01110101    U = 01010101
v = 01110110    V = 01010110
w = 01110111    W = 01010111
x = 01111000    X = 01011000
y = 01111001    Y = 01011001
z = 01111010    Z = 01011010

现在看下面的代码,将我们要转换大小写的字母与空格进行异或(xor)运算:

#include<stdio.h>
int main(void)
{
    char x = ‘A‘;
    char y = ‘b‘;

    printf("Original case:- %c %c",x,y);

    x = x ^ ‘ ‘;
    y = y ^ ‘ ‘;

    printf("\n\nChanged case:- %c %c",x,y);

    return 0;
}

有人问:为什么是空格?因为空格的ASCII值是32,1左移5位,也就是第5比特。

原文来自http://www.studyalgorithms.com/string/easiest-way-to-change-case-of-alphabets/

时间: 2024-11-09 05:46:03

一个简单的转换字母大小写的方法的相关文章

python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)

#可变变量:list, 字典#不可变变量:元祖,字符串字符串的操作(去掉空格, 切片, 查找, 连接, 分割, 转换首字母大写, 转换字母大小写, 判断是否是数字字母, 成员运算符(in / not in))字符串使用时用单引号或者双引号括起来: var1 = 'hello' var2 ="world" 字符串不能修改值, 如下例所示: 以下是字符串常用的一些操作. 1. 去掉空格str.strip() # 去掉两边的空格和换行符str.strip('a') # 去掉两边指定的字符st

C++ Daily 《4》----一个简单的 int to string 的方法

经常会在项目中用到 int to string, 之前一般用C语言的 sprintf, 发现C++ 中的 ostringstream 可以轻松完成这个任务. #include <iostream> #include <string> #include <sstream> using namespace std; int main(void) { ostringstream num; num << 123; string str = num.str(); co

Kettle创建一个简单的转换-表数据同步

1.创建一个转换 2.设置数据库连接配置 3.在核心对象中拖入一个表输入,并对表输入进行属性设置 4.在核心对象中拖入插入/更新组件 5.按住shift从表输入到插入/更新 6.在对插入/更新进行配置,在用来查询的关键字中需要设置连接的字段 7.保存,并运行这个转换. 原文地址:https://www.cnblogs.com/langzichanglu/p/11994025.html

一个简单xml数据转换为数组的方法

本人用easywechat做微信回复图文,从数据库中拿到的数据直接是xml拼好的数据,但是框架只有自带的获取xml格式的语句,所有需要将xml数据中所需要的数据拿出来用来拼接. 搜了好多资料说的都很麻烦.ps:可能是我水平不够;-) ok,废话不多说, 上代码: // 以这个xml数据串为例 $xml = "<item><Title><![CDATA[亲爱的顾客:]]></Title><Content><![CDATA[]]>

Linux下一个简单的日志系统的设计及其C代码实现

1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回值及其执行情况.脚本执行及调用情况等.通过阅读日志文件,我们能够较快地跟踪程序流程,并发现程序问题. 因此,熟练掌握日志系统的编写方法并快速地阅读日志文件,是对一个软件开发工程师的基本要求. 本文详细地介绍了Linux下一个简单的日志系统的设计方法,并给出了其C代码实现.本文为相关开发项目Linux

实现一个简单的redis-client

redis通信原理 redis客户端与服务端之间使用tcp进行通信,redis客户端每执行一条命令,都会将命令封装成特定的格式传送到服务端, 如果我们需要实现redis客户端,就需要完成请求的封装. 如果我们打开redis的aof文件,经常会看到类似于下面这样的内容,这实际上就是客户端发送给服务端的数据格式 下面用java实现一个简单的拥有set.get方法的redis客户端,网络编程使用socket,具体代码如下所示: public class RedisClient { private In

一个简单的XML与数组之间的转换

xml是网络使用最多的数据交换格式,所以,不掌握怎么操作它,又有蛋疼的了. php中可以操作xml的类/函数很多,个人认为最简单的是SimpleXMLElement这个类,它的使用就跟其名字一样:简单.当然要想全面自如的操作xml,还得借助其他的类.SimpleXMLElement主要是对xml的进行节点的添加和获取,以及输出整个xml文本内容,但是对于实现一个简单的与数组之间的内容转换,已经足够了. 比如我们现在在接一个sdk,对方接口传过来的是一个简单的xml格式数据,我们需要取到它,并作一

excel 英文字母大小写转换

excel 英文字母大小写转换 CreateTime--2018年5月26日18:20:06 Author:Marydon 1.英文字母转大写 将A列小写转大写 语法说明: upper(单元格标识),会将指定单元格的内容全部转换成大写,并将内容输出到光标所在单元格. 第一步:在B列输入=upper(A4)-->回车 第二步:选中该单元格-->鼠标移动有单元格的右下角,会出现一个+符号,一直往下拖拽: ==========================下面是去除B列对A列的依赖========

算法积累(字符串转换驼峰,判断一个字符串中那个字母出现次数最多,并且出现了几次)

因为算法比较烂,所以想做一下这方面的积累. 尽量能够每天学习一个新算法吧.(不过估计很悬) 好吧,今天第一个是字符串转换驼峰 直接上代码 var str = 'toupper-case'; var arr = str.split('-'); //toupper,case for (var i = 1; i < arr.length; i++) { //把除了第一个数组后面的数组的第一个值设置为大写然后大写字母和去掉第一个字符的剩下的字符进行拼合 arr[i] = arr[i].charAt(0)