C語言中字母大小寫轉(zhuǎn)化簡單示例
C語言入門的時(shí)候都會(huì)遇到要求寫大小寫轉(zhuǎn)換的題目
這類題目主要通過ASCII(美國信息交換標(biāo)準(zhǔn)代碼)碼差值實(shí)現(xiàn),
A對(duì)應(yīng)ASCII碼十進(jìn)制數(shù)字是65,a對(duì)應(yīng)ASCII碼十進(jìn)制數(shù)字是97,
即大小寫字母之間ASCII碼差值為32,想要將大寫字母轉(zhuǎn)換為小寫字母可以將該字符ASCII碼值+32,同理小寫字母轉(zhuǎn)換成大寫字母只需將該字符ASCII碼值-32。
咱們先來看看這個(gè)代碼:
咋一看,欸?很不錯(cuò),沒啥毛病,編譯運(yùn)行試一下,發(fā)現(xiàn)還不錯(cuò)
確實(shí)可以,但是.....這樣呢?
啊這.........這是怎么回事呢?
原來,
我們之前的這個(gè)else,它的執(zhí)行條件是之前if里的范圍的補(bǔ)集,也就是說只要是在(x<='a'||x>='z')的范圍內(nèi),它都會(huì)執(zhí)行“x=x+32”,所以出現(xiàn)上述輸入字符,也能輸出的情況。
這個(gè)時(shí)候,只要具體化else的執(zhí)行條件,將其變成else if,即可。
如下:
這樣就可以啦!
附一個(gè)C語言字母大小寫互換的簡單方法
字母的大小寫互換其實(shí)很簡單
回到最基本的數(shù)據(jù)的存儲(chǔ)形式,從八位二進(jìn)制角度去看大寫字母和小寫字母,你會(huì)發(fā)現(xiàn)它們的低四位是相同的,高四位有細(xì)微差別。
舉例:
ASCII | DEC | BIN |
---|---|---|
‘A’ | 65 | 01000001 |
‘a’ | 97 | 01100001 |
‘B’ | 66 | 01000010 |
‘b’ | 98 | 01100010 |
‘X’ | 88 | 01011000 |
‘x’ | 120 | 01111000 |
仔細(xì)觀察 發(fā)現(xiàn)是第六位不同!
大小寫互換的方法
- 考慮到低四位完全相同 只用互換高四位的第六位就可以實(shí)現(xiàn)大小寫互換
- 互換高四位的某一位而不改變低四位,我們聯(lián)想到位運(yùn)算中的按位異或^ 關(guān)于按位異或 詳見按位異或
- 由按位異或的知識(shí),我們可以尋找一個(gè)數(shù),使得任意的一個(gè)八位二進(jìn)制數(shù)與它進(jìn)行異或操作后,高四位的第六位01取反,低四位不變
- 回顧我們的目標(biāo) 假如把'A'變?yōu)?#39;a' 我們需要把01000001變?yōu)?1100001,也就是把第六位的0變?yōu)? 。
- 我們找到這個(gè)數(shù)了!它的二進(jìn)制是00100000 十進(jìn)制是32
- 01000001^00100000=01100001,是不是很神奇?同理把小寫字母'a'變?yōu)?#39;A'也只需要把它與32進(jìn)行按位異或操作就可以啦~
#include<stdio.h> int main(){ int i; char s[100]; //讀入字符串 gets(s); for(i=0;s[i]!='\0';i++) { if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z')) s[i]^=32;//核心語句,實(shí)現(xiàn)字符串中字母的大小寫互換 } printf("%s",s); return 0; }
樣例輸入->
Hello,Java!
樣例輸出->
hELLO,jAVA!
總結(jié)
到此這篇關(guān)于C語言中字母大小寫轉(zhuǎn)化的文章就介紹到這了,更多相關(guān)C語言字母大小寫轉(zhuǎn)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
生成隨機(jī)數(shù)rand函數(shù)的用法詳解
本篇文章是對(duì)生成隨機(jī)數(shù)rand函數(shù)的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++實(shí)現(xiàn)LeetCode(89.格雷碼)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(89.格雷碼),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++ socket實(shí)現(xiàn)miniFTP
這篇文章主要為大家詳細(xì)介紹了C++ socket實(shí)現(xiàn)miniFTP的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11C語言數(shù)據(jù)結(jié)構(gòu)中串的模式匹配
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)中串的模式匹配的相關(guān)資料,需要的朋友可以參考下2017-05-05Qt重寫QTreeView自繪實(shí)現(xiàn)酷炫樣式
QTreeView,顧名思義,就是一種樹形的控件,在我們需要做類似于文件列表的視圖時(shí),是一個(gè)不錯(cuò)的選擇,下面我們就來看看qt如何重寫QTreeView實(shí)現(xiàn)酷炫樣式,感興趣的可以了解一下2023-08-08C語言數(shù)據(jù)結(jié)構(gòu)系列之樹的概念結(jié)構(gòu)和常見表示方法
本章將正式開啟數(shù)據(jù)結(jié)構(gòu)中?“樹”?部分的講解,本章將介紹樹的概念和結(jié)構(gòu),以及樹的表示方法,感興趣的朋友進(jìn)來看看吧2022-02-02