日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言中字母大小寫轉化簡單示例_C 語言

作者:jebe_lwb ? 更新時間: 2022-12-22 編程語言

C語言入門的時候都會遇到要求寫大小寫轉換的題目

這類題目主要通過ASCII(美國信息交換標準代碼)碼差值實現,

A對應ASCII碼十進制數字是65,a對應ASCII碼十進制數字是97,

即大小寫字母之間ASCII碼差值為32,想要將大寫字母轉換為小寫字母可以將該字符ASCII碼值+32,同理小寫字母轉換成大寫字母只需將該字符ASCII碼值-32。

咱們先來看看這個代碼:

?咋一看,欸?很不錯,沒啥毛病,編譯運行試一下,發現還不錯

?確實可以,但是.....這樣呢?

?啊這.........這是怎么回事呢?

原來,

?我們之前的這個else,它的執行條件是之前if里的范圍的補集,也就是說只要是在(x<='a'||x>='z')的范圍內,它都會執行“x=x+32”,所以出現上述輸入字符,也能輸出的情況。

這個時候,只要具體化else的執行條件,將其變成else if,即可。

如下:

?這樣就可以啦!

附一個C語言字母大小寫互換的簡單方法

字母的大小寫互換其實很簡單

回到最基本的數據的存儲形式,從八位二進制角度去看大寫字母和小寫字母,你會發現它們的低四位是相同的,高四位有細微差別。

舉例:

ASCII DEC BIN
‘A’ 65 01000001
‘a’ 97 01100001
‘B’ 66 01000010
‘b’ 98 01100010
‘X’ 88 01011000
‘x’ 120 01111000

仔細觀察 發現是第六位不同!

大小寫互換的方法

  • 考慮到低四位完全相同 只用互換高四位的第六位就可以實現大小寫互換
  • 互換高四位的某一位而不改變低四位,我們聯想到位運算中的按位異或^ 關于按位異或 詳見按位異或
  • 由按位異或的知識,我們可以尋找一個數,使得任意的一個八位二進制數與它進行異或操作后,高四位的第六位01取反,低四位不變
  • 回顧我們的目標 假如把'A'變為'a' 我們需要把01000001變為01100001,也就是把第六位的0變為1 。
  • 我們找到這個數了!它的二進制是00100000 十進制是32
  • 01000001^00100000=01100001,是不是很神奇?同理把小寫字母'a'變為'A'也只需要把它與32進行按位異或操作就可以啦~
#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;//核心語句,實現字符串中字母的大小寫互換
    }
    printf("%s",s);
    return 0;
}

樣例輸入->

Hello,Java!

樣例輸出->

hELLO,jAVA!

總結

原文鏈接:https://blog.csdn.net/jebe_lwb/article/details/118888103

欄目分類
最近更新