如果有一個英文字母為大寫(Uppercase),要將它轉成為小寫(Lowercase)的話
要如何轉換呢?
先來看看英文字母的ASCII碼(d表示Decimal(預設);h表示Hexadecimal;b表示Binary)
大寫A~Z所對應的ASCII碼範圍為65~90
小寫a~z所對應的ASCII碼範圍為97~122
相同英文字母的大小寫差32
由此推由若A要變成小寫的a要加32;反之減32
::::::::::::::::::::::::::::::::::::::::::::::
#include<iostream>
using namespace std;
void main()
{
char ch = 'a';
cout<<"The lowercase character:"<<ch<<endl;
ch = ch - 32;
cout<<"The uppercase character:"<<ch<<endl;
}
::::::::::::::::::::::::::::::::::::::::::::::
但是否有其它的方法呢?有的,可以使用AND及OR來做轉換,先瞭解大小寫位元的差別
舉個例子,英文字母大寫A與小寫a的二進制表示
bit 7 6 5 4 3 2 1 0
A = 0 1 0 0 0 0 0 1 b
a = 0 1 1 0 0 0 0 1 b
注意bit 5,大寫與小寫字母差在bit 5(即十進位值32)
大寫轉換成小寫時,可以利用OR來轉換,將大寫字母與00100000b(即20h)做OR
即可轉為小寫
EX:
A = 0100 0001 b
OR 0010 0000 b
--------------
0110 0001 b = a
小寫轉換成大寫時,可以利用AND來轉換,將小寫字母與11011111b(即DFh)做AND
即可轉為大寫
EX:
a = 0110 0001 b
AND 1101 1111 b
--------------
0100 0001 b = A
範例2.
::::::::::::::::::::::::::::::::::::::::::::::
#include<iostream>
using namespace std;
void main()
{
char ch = 'a';
cout<<"The lowercase character:"<<ch<<endl;
ch = ch & 0xDF;
cout<<"The uppercase character:"<<ch<<endl;
}
::::::::::::::::::::::::::::::::::::::::::::::
那有沒有更簡單的方法呢?當然有的,不過這是最懶的方法,就是直接使用函數
(1)toupper 轉換為大寫英文字母 需引入#include<cctype>or#include<ctype.h>
(2)tolower 轉換為小寫英文字母 需引入#include<cctype>or#include<ctype.h>
範例3.
::::::::::::::::::::::::::::::::::::::::::::::
#include<iostream>
#include<cctype>
using namespace std;
void main()
{
char ch = 'a';
cout<<"The lowercase character:"<<ch<<endl;
ch = toupper(ch);
cout<<"The uppercase character:"<<ch<<endl;
}
::::::::::::::::::::::::::::::::::::::::::::::
還有沒有其它方法呢?還是有的,不過現在已經夠用了也是最常見的!!!
Written By James On 2004/02/08