一個簡單的轉換字母大小寫的方法


【這里我們將要介紹一個最簡單也最快速的轉換字母大小寫的方法,提示:使用位技巧】

【以下代碼用C語言編寫】

在編程的時候我們經常遇到需要轉換字母大小寫的情況,有時候就是這個問題,有時候是為了解決其它問題。大家應該能想到一些方法。我將要介紹一種最優美的方法,也就是用比特技巧解決問題。

我們已近討論過一些比特操作技巧:

這里我們來討論一種利用ASCII值來轉換字母大小寫的技巧,這個技巧非常簡單,只要將字母的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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM