原文網址,並不是徹底是原文的翻譯,而是瞭解之後,用本身的想法解釋一遍segmentfault
有一個英文字串,請將這個字串變為大寫rest
通常我們的想法像這樣:code
char str[256] = "segmentfault"; for(int i = 0 ; str[i] != '\0' ; i++){ if('a' <= str[i] && str[i] <= 'z') str[i] = str[i] - 'a' + 'A'; }
我們先觀察一下大小寫ASCII碼的比較:ci
A->01000001 B->01000010 C->01000011 D->01000100 a->01100001 b->01100010 c->01100011 d->01100100
其實能夠發現在ASCII碼,大小寫只有bit5的不一樣,因此只要小寫字母將bit5替換為0,就能轉為大寫字母.實做時只要將小寫字母和11011111作and運算便可獲得大寫字母,如下為實做:get
char str[256] = "segmentfault"; for(int i = 0 ; str[i] != '\0' ; i++){ if('a' <= str[i] && str[i] <= 'z') str[i] = str[i] &~ (1 << 5); }
有一個英文字串,將這個英文字串用上述方法改為小寫it
有一個英文字串,將這個英文字串用上述的方法把此英文字串作大小寫轉換io
將大寫字母轉為小寫字母只要將大寫字母的bit5替換為1便可,實做只要將大寫字母和00100000作or運算便可獲得小寫字母,實做以下:方法
char str[256] = "SEGMENTFAULT"; for(int i = 0 ; str[i] != '\0' ; i++){ if('A' <= str[i] && str[i] <= 'Z') str[i] = str[i] | (1 << 5); }
大小寫替換只要將前兩個想法加在一塊兒便可:小寫字母和11011111作and運算便可獲得大寫字母,大寫字母和00100000作or運算便可獲得小寫字母,實做以下:英文
char str[256] = "SegmentFault"; for(int i = 0 ; str[i] != '\0' ; i++){ if('a' <= str[i] && str[i] <= 'z') str[i] = str[i] & ~(1 << 5); else if('A' <= str[i] && str[i] <= 'Z') str[i] = str[i] | (1 << 5); }