C語(yǔ)言字母轉(zhuǎn)換大小寫(xiě)的3種方法圖文詳解
方法一:庫(kù)函數(shù)法
1.小寫(xiě)轉(zhuǎn)換大寫(xiě):toupper()函數(shù)
我們先來(lái)看toupper()函數(shù)的簡(jiǎn)介:

注意,toupper()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看toupper()函數(shù)的原型:
int toupper ( int c );
綜上可知,當(dāng)你向toupper()函數(shù)傳輸一個(gè)小寫(xiě)字母(實(shí)際是它的ASCII值)時(shí),它會(huì)返回給你一個(gè)該字母對(duì)應(yīng)的大寫(xiě)字母(實(shí)際是大寫(xiě)字母的ASCII值)。
我們?cè)囍诰幾g器中測(cè)試一下該函數(shù):

可以看到,toupper()函數(shù)可以直接接收整形數(shù)據(jù)即字符的ASCII碼值作為參數(shù),然后返回相應(yīng)大寫(xiě)字母的ASCII碼值。
但要注意的是,作為toupper()函數(shù)的參數(shù)的整形只能識(shí)別一個(gè)字節(jié)的整形,即十進(jìn)制0-255范圍內(nèi),如果給定的整形大小超過(guò)一個(gè)字節(jié),則會(huì)發(fā)生整形截?cái)?/strong>,即會(huì)自動(dòng)截?cái)嗪蟀宋恢獾臄?shù)據(jù)。
還有需要注意的是,在發(fā)生截?cái)?/strong>的情況下,toupper函數(shù)返回的是截?cái)嗪蟮?strong>原數(shù)據(jù),而不會(huì)返回轉(zhuǎn)換成大寫(xiě)后的數(shù)據(jù),如:



2.大寫(xiě)轉(zhuǎn)換小寫(xiě):tolower()函數(shù)
我們來(lái)看一下tolower()函數(shù)的簡(jiǎn)介:

可以發(fā)現(xiàn),tolower()函數(shù)的函數(shù)和前面的toupper()函數(shù)非常相似,區(qū)別只是tolower()函數(shù)將大寫(xiě)轉(zhuǎn)換成小寫(xiě),而toupper()函數(shù)則負(fù)責(zé)將小寫(xiě)轉(zhuǎn)換成大寫(xiě)。
使用方法完全和toupper()一樣,如:

同樣也會(huì)發(fā)生整形截?cái)啵?/p>


可以看到,在前面的演示中tolower()函數(shù)也發(fā)生了整形截?cái)?/strong>。
當(dāng)我們會(huì)使用toupper()函數(shù)和tolower()函數(shù)后,下面我們來(lái)看一下如何不借助庫(kù)函數(shù)來(lái)實(shí)現(xiàn)字母的大小寫(xiě)轉(zhuǎn)換。即構(gòu)造自己的字母大小寫(xiě)轉(zhuǎn)換函數(shù)。
方法二:加減32法
1.小寫(xiě)轉(zhuǎn)換大寫(xiě):字符數(shù)據(jù)減32
ASCII碼表:

由ASCII碼表我們可以得知,要根據(jù)小寫(xiě)字母得到大寫(xiě)字母,只需將小寫(xiě)字母的值減去32即可,因此我們自己寫(xiě)一個(gè)函數(shù)負(fù)責(zé)將傳入的符合小寫(xiě)字母區(qū)間的字母轉(zhuǎn)換成大寫(xiě)字母,其余不符合的則返回原值,代碼實(shí)現(xiàn)邏輯教簡(jiǎn)單,如下:
#include<stdio.h>
int my_toupper(int ch)
{
if (ch >= 97 && ch <= 122)
return ch - 32;
else
return ch;
}
int main()
{
char ch = 'a';
ch=my_toupper(ch);
printf("%c", ch);
return 0;
}代碼運(yùn)行效果:



可見(jiàn),該函數(shù)具有成功將小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)的功能。
2.大寫(xiě)轉(zhuǎn)換小寫(xiě):字符數(shù)據(jù)加32
同理可知,要根據(jù)大寫(xiě)字母得到小寫(xiě)字母,只需將大寫(xiě)字母的值加上32即可,因此我們自己寫(xiě)一個(gè)函數(shù)負(fù)責(zé)將傳入的符合大寫(xiě)字母區(qū)間的字母轉(zhuǎn)換成小寫(xiě)字母,其余不符合的則返回原值,該部分代碼實(shí)現(xiàn)邏輯與前文類似,如下:
#include<stdio.h>
int my_tolower(int ch)
{
if (ch >= 65 && ch <= 90)
return ch + 32;
else
return ch;
}
int main()
{
char ch = 'A';
ch = my_tolower(ch);
printf("%c", ch);
return 0;
}代碼運(yùn)行效果:

該函數(shù)同樣能接收符合條件的字符ASCII碼值完成轉(zhuǎn)換:

當(dāng)不符合條件時(shí),返回原值:

方法三:位運(yùn)算法
大小寫(xiě)轉(zhuǎn)換:字符數(shù)據(jù)按位異或32
在位運(yùn)算的層面上,我們可以借助按位異或( ^ , 相同為0,不同為1)來(lái)幫我們實(shí)現(xiàn)字母大小寫(xiě)的轉(zhuǎn)換,如:

反之用97^32=65.
因此該方法可以實(shí)現(xiàn)傳入大寫(xiě)字符轉(zhuǎn)換成小寫(xiě)字符,傳入小寫(xiě)字符轉(zhuǎn)換成大寫(xiě)字符的效果,代碼如下:
int my_move(int ch)
{
if (((ch >= 97) && (ch <= 122)) || ((ch >= 65) && (ch <= 90)))
return ch ^ 32;
else
return ch;
}
int main()
{
char ch1 = 'a';
ch1=my_move(ch1);
char ch2 = 'A';
ch2=my_move(ch2);
char ch3 = 97;
ch3=my_move(ch3);
char ch4= 65;
ch4=my_move(ch4);
char ch5 = 322;
ch5=my_move(ch5);
printf("%c\n", ch1);
printf("%c\n", ch2);
printf("%c\n", ch3);
printf("%c\n", ch4);
printf("%c\n", ch5);
return 0;
}代碼運(yùn)行效果如下:

可以看到,該函數(shù)同樣可以達(dá)到之前大小寫(xiě)轉(zhuǎn)換的效果。
總結(jié)
到此這篇關(guān)于C語(yǔ)言字母轉(zhuǎn)換大小寫(xiě)的3種方法的文章就介紹到這了,更多相關(guān)C語(yǔ)言字母轉(zhuǎn)換大小寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- c語(yǔ)言將字符串中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母
- C語(yǔ)言中對(duì)字母進(jìn)行大小寫(xiě)轉(zhuǎn)換的簡(jiǎn)單方法
- C語(yǔ)言實(shí)現(xiàn)字母大小寫(xiě)轉(zhuǎn)換的方法
- 用shell腳本和c語(yǔ)言將大寫(xiě)字母轉(zhuǎn)成小寫(xiě)的代碼
- C語(yǔ)言中利用封裝好的函數(shù)實(shí)現(xiàn)英文字母的大小寫(xiě)轉(zhuǎn)換
- C語(yǔ)言詳解用char實(shí)現(xiàn)大小寫(xiě)字母的轉(zhuǎn)換
- C語(yǔ)言中字母大小寫(xiě)轉(zhuǎn)化簡(jiǎn)單示例
相關(guān)文章
詳解散列表算法與其相關(guān)的C語(yǔ)言實(shí)現(xiàn)
這篇文章主要介紹了詳解散列表算法與其相關(guān)的C語(yǔ)言實(shí)現(xiàn),平時(shí)經(jīng)常出現(xiàn)于各大考試競(jìng)賽與程序員面試題目當(dāng)中,需要的朋友可以參考下2015-08-08
C++ 中繼承與動(dòng)態(tài)內(nèi)存分配的詳解
這篇文章主要介紹了C++ 中繼承與動(dòng)態(tài)內(nèi)存分配的詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08
C++中函數(shù)的默認(rèn)參數(shù)詳細(xì)解析
在函數(shù)聲明或定義時(shí),直接對(duì)參數(shù)賦值,該參數(shù)就是默認(rèn)參數(shù)。在函數(shù)調(diào)用時(shí),省略部分或全部參數(shù),這時(shí)就會(huì)使用默認(rèn)參數(shù)進(jìn)行代替2013-10-10
C語(yǔ)言函數(shù)調(diào)用的三種實(shí)現(xiàn)方法實(shí)例
C語(yǔ)言中函數(shù)的調(diào)用主要有如下三種方法,直接調(diào)用,函數(shù)指針調(diào)用,函數(shù)指針傳遞調(diào)用其中后兩種本質(zhì)一樣,但在有無(wú)返回值時(shí)還稍有差別,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言函數(shù)調(diào)用的三種實(shí)現(xiàn)方法,需要的朋友可以參考下2022-01-01
基于c++11的event-driven library的理解
這篇文章主要介紹了基于c++11的event-driven library的理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Windows下搭建FFmpeg開(kāi)發(fā)調(diào)試環(huán)境的詳細(xì)步驟
這篇文章主要介紹了Windows下搭建FFmpeg開(kāi)發(fā)調(diào)試環(huán)境,本文以VS2017為例一步步介紹怎么搭建一個(gè)可供單步調(diào)試的FFmpeg項(xiàng)目,需要的朋友可以參考下2022-07-07
C++中的函數(shù)指針與函數(shù)對(duì)象的總結(jié)
以下是對(duì)C++中的函數(shù)指針與函數(shù)對(duì)象的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07

