網(wǎng)站首頁 編程語言 正文
C語言入門的時候都會遇到要求寫大小寫轉(zhuǎn)換的題目
這類題目主要通過ASCII(美國信息交換標(biāo)準(zhǔn)代碼)碼差值實(shí)現(xiàn),
A對應(yīng)ASCII碼十進(jìn)制數(shù)字是65,a對應(yīng)ASCII碼十進(jìn)制數(shù)字是97,
即大小寫字母之間ASCII碼差值為32,想要將大寫字母轉(zhuǎn)換為小寫字母可以將該字符ASCII碼值+32,同理小寫字母轉(zhuǎn)換成大寫字母只需將該字符ASCII碼值-32。
咱們先來看看這個代碼:
?咋一看,欸?很不錯,沒啥毛病,編譯運(yùn)行試一下,發(fā)現(xiàn)還不錯
?確實(shí)可以,但是.....這樣呢?
?啊這.........這是怎么回事呢?
原來,
?我們之前的這個else,它的執(zhí)行條件是之前if里的范圍的補(bǔ)集,也就是說只要是在(x<='a'||x>='z')的范圍內(nèi),它都會執(zhí)行“x=x+32”,所以出現(xiàn)上述輸入字符,也能輸出的情況。
這個時候,只要具體化else的執(zhí)行條件,將其變成else if,即可。
如下:
?這樣就可以啦!
附一個C語言字母大小寫互換的簡單方法
字母的大小寫互換其實(shí)很簡單
回到最基本的數(shù)據(jù)的存儲形式,從八位二進(jìn)制角度去看大寫字母和小寫字母,你會發(fā)現(xiàn)它們的低四位是相同的,高四位有細(xì)微差別。
舉例:
ASCII | DEC | BIN |
---|---|---|
‘A’ | 65 | 01000001 |
‘a(chǎn)’ | 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ù),使得任意的一個八位二進(jìn)制數(shù)與它進(jìn)行異或操作后,高四位的第六位01取反,低四位不變
- 回顧我們的目標(biāo) 假如把'A'變?yōu)?a' 我們需要把01000001變?yōu)?1100001,也就是把第六位的0變?yōu)? 。
- 我們找到這個數(shù)了!它的二進(jìn)制是00100000 十進(jìn)制是32
- 01000001^00100000=01100001,是不是很神奇?同理把小寫字母'a'變?yōu)?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é)
原文鏈接:https://blog.csdn.net/jebe_lwb/article/details/118888103
相關(guān)推薦
- 2023-12-08 IDEA中, Maven不顯示插件 mybatis-generator
- 2022-07-12 快速上手Vim編輯器
- 2022-04-11 SQL?Server的觸發(fā)器你了解多少_MsSql
- 2022-06-20 深入淺析C#?11?對?ref?和?struct?的改進(jìn)_C#教程
- 2022-02-23 去除type=“number“輸入框聚焦時的上下箭頭
- 2022-10-06 C語言字符串壓縮之ZSTD算法詳解_C 語言
- 2022-03-30 一篇文章帶你了解C語言的選擇結(jié)構(gòu)_C 語言
- 2023-01-11 Android?nonTransitiveRClass資源沖突問題淺析_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支