各位看官們,大家好,上一回中咱們說的是C語言中常量的例子,這一回咱們說的例子是:大小寫字符轉換。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,在程序中經常會用到英文字符,有時候需要把英文字符進行大小寫轉換。如何進行轉換呢?接下來我們一起看看具體的轉換方法。
大家都知道每個字符都有相應的ASIIC碼,如果把一個字符的ASIIC碼加上一個數值就變成了另外一個字符的ASIIC碼。比如給字符a的ASIIC碼加上1後就成了字符字符b的ASIIC碼。基於這個原理,我們可以在小寫字符的ASIIC碼加上一個數值轉換成該字符大寫形式時的ASIIC碼。不過還有個問題,那就是加上的數值是多少呢?其實大家可以從ASIIC碼表中發現規律,這個數值是固定的,而且我們可以計算出來,計算方法就是:"a-A"
。
另外,在ASIIC碼表中,小寫字符的ASIIC碼比大寫字符的要大,因此,把小寫字符轉換為大小字符時,需要減去一個數值。反之,把大寫字符轉換為小寫字符時就加上一個數值。下面我們通過具體的代碼來說明:
char val_lower = 'a'; //定義一個小寫字符a
char val_upper = val_lower - ('a'-'A'); //把小寫字符a轉換為大寫字符A
printf("the lower is %c ,the upper is %c \n",val_lower,val_upper);
大家從代碼中可以看到,把小寫字符轉換為大寫字符的方法就是我們剛才介紹過的方法。此時,程序的輸出結果如下:
the lower is a ,the upper is A
從運行結果中可以看到小寫字符轉換成了大寫字符。
有時候為了轉換方便,可以定義一個宏來進行轉換,下面是宏的定義:
#define TOUPPER(c) ((c)-('a'-'A')) //把小寫字符轉換為大寫字符
#define TOLOWER(c) ((c)+('a'-'A')) //把大寫字符轉換為小寫字符
printf("the lower is %c ,the upper is %c \n",val_lower,TOUPPER(val_lower));
printf("the upper is %c ,the lower is %c \n",val_upper,TOLOWER(val_upper));
下面是此時程序的運行結果:
the lower is a ,the upper is A
the upper is A ,the lower is a
其實,C標准庫也提供了大小寫字符的轉換函數,它們位於
文件中,其函數原型如下:
int toupper(int c); //把小寫字符轉換為大寫字符
int tolower(int c); //把大寫字符轉換為小寫字符
這兩個函數的使用方法和剛才我們代碼中宏的使用方法類似,因此就不做詳細說明了。不過它們具有很好的可移植性。
在標准庫中這兩個函數是通過一個轉換表實現的,表中包含了ASIIC碼以外的內容。我們的轉換方法是建立在字符用ASIIC碼表示的基礎上,因此,如果使用了其它方式表示字符,那麼我們定義的宏就會失效。鑒於這個原因,我們推薦大家使用標准庫提供的大小寫字符轉換函數。
看官們,這裡就不寫代碼了,完整的代碼放到了我的資源中,大家可以下載使用。
下面是程序的運行結果,請大家參考:
init value : the lower is a ,the upper is A
the lower is a ,the upper is A
the upper is A ,the lower is a
the lower is a ,the upper is A
the upper is A ,the lower is a
各位看官,關於大小寫字符轉換的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解。