做類似3d溜溜的網(wǎng)站網(wǎng)上怎么注冊公司免費的
文章目錄
- Beginning
- 1)ASCLL 碼
- 2)大小比較
- 2)判斷數(shù)字字符
- 3)字符、數(shù)字間的相互轉(zhuǎn)換
- End
Beginning
在 C++ 中,字符和整數(shù)有著密不可分的關(guān)系。原因就是在計算機中,字符是以一種較 ASCLL 碼的整數(shù)存儲的。自然,在算法競賽或一些應(yīng)用場景中,字符和整數(shù)之間的相互轉(zhuǎn)換也成為一種華麗且簡便的技巧。
但一旦使用不好這些技巧,就可能導(dǎo)致程序出現(xiàn)漏洞,出現(xiàn)運行問題。所以,本文將介紹一些基本的字符和整數(shù)之間的轉(zhuǎn)換用法。望大家多多指教。
1)ASCLL 碼
百度百科 上的解釋:ASCII (American Standard Code for Information Interchange):美國信息交換標(biāo)準(zhǔn)代碼是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語和其他西歐語言。
以下是可顯示字符的 ASCLL 碼表:
以下是 ASCLL 控制字符表:
在 C++ 語言中,可以通過強制類型轉(zhuǎn)換來獲取字符的 ASCLL 碼:
cout << int('A'); // 輸出65
cout << int(' '); // 輸出32
注意:在使用 cout 時,一定要加強制類型轉(zhuǎn)換,即 int(…)。不然會以整數(shù)輸出;scanf 和 printf 因為有固定的類型占位符,反而沒有這和問題。
在 Python 中,可以用 ord()
函數(shù)獲取字符的 ASCLL 碼值:
print(ord('a')) # 輸出97
print(ord('+')) # 輸出43
在 Java中,可以用整數(shù) Integer 類的 valueOf()
函數(shù)進行獲取:
System.out.println(Integer.valueOf('q')); // 輸出113
System.out.println(Integer.valueOf('5')); // 輸出53
2)大小比較
在 C++ 中,字符(char)與整數(shù)(int)比較時,會把字符自動轉(zhuǎn)為整型去比較(因為字符占 1 字節(jié),整型占 4 字節(jié),C++默認(rèn)向更寬的數(shù)據(jù)類型轉(zhuǎn)換)。
所以,字符和字符、字符和整數(shù)之間都可以按照 ASCLL 碼比較大小:
cout << bool('a' < 100); // 輸出1(即true)
cout << bool('0' != 48); // 輸出0(即false)
Pyhton 則對類型要求較為嚴(yán)格,如果直接用字符和數(shù)字比較,會報 TypeError: '<' not supported between instances of 'str' and 'int'
??梢杂?chr()
函數(shù)把整數(shù)轉(zhuǎn)成字符比較,或用 ord()
函數(shù)把字符轉(zhuǎn)換成整數(shù)比較:
print('a' > 'b') # 輸出False
print(chr(97) < 'b') # 輸出True
print(ord('a') == 98) # 輸出False,'a'的ASCLL是97
在 Java 中,我們可以和 C++ 一樣,直接用比較運算符來比較大小:
System.out.println('a' == 'b'); // 輸出false
還可以用 Character 類的 compare() 方法對兩個字符進行比較,該函數(shù)返回兩個字符的差值。對于 Character.compare(c1, c2) > 0
,說明 c1>c2
;對于 Character.compare(c1, c2) < 0
,說明 c1<c2
;對于 Character.compare(c1, c2) == 0
,說明 c1==c2
:
System.out.println(Character.compare('p', 'r')); // 輸出-2,即'q'比'r'的ASCLL小2
2)判斷數(shù)字字符
在 ASCLL 碼表中,我們會發(fā)現(xiàn),數(shù)字的 ASCLL 碼都在 48~57 之間,所以可以利用這個特點來判斷是否是數(shù)字字符:
C++ & Java:if(ch>=48 && ch<=57)
Python:if ch>=48 and ch<=57
我們還可以利用類型轉(zhuǎn)換,判斷字符的大小是否在 ‘0’ 和 '9’之間,同樣可以達(dá)到效果:
C++ & Java:if(ch>='0' && ch<='9')
Python:if ch>='0' and ch<='9'
同時,許多語言都自帶判斷字符是否是數(shù)字的函數(shù)實現(xiàn):
C++:
#include <cctype> // 或 #inlucde <ctype.h>
int isdigit(char c); // 是數(shù)字返回1,不是返回0
int isalpha(char c); // 不是字母返回0,,是大寫字母返回1,是小寫字母返回2
上面兩個函數(shù)在不同編譯器下有差別,以上是 MinGW-w64 GCC 11.4.0 64-bit 編譯器的結(jié)果。
Python:
print('2'.isdigit()) #True,這是在字符串對象里的方法
print('u'.isalpha()) #True
Java:
Character.isDigit(char c); // 判斷字符c是否是數(shù)字字符,是返回True,不是返回False
Character.isLowerCase(char c); // 判斷c是不是小寫字母,是返回True,不是返回False
Character.isUpperCase(char c); // 判斷c是否是大寫字母,是返回True,不是返回False
Character.isLetterOrDigit(char c); // 判斷c是否是字母或數(shù)字字符,是返回True,不是返回False
3)字符、數(shù)字間的相互轉(zhuǎn)換
先看一些 ASCLL 碼及其對應(yīng)字符之間的性質(zhì):
- 常見ASCII碼的大小規(guī)則:數(shù)字< 大寫字母 < 小寫字母;
- 數(shù)字比字母要小。如 “7”<“F”;
- 數(shù)字0比數(shù)字9要小,并按0到9順序遞增。如 “3”<“8” ;
- 字母A比字母Z要小,并按A到Z順序遞增。如“A”<“Z” ;
- 同個字母的大寫字母比小寫字母要小32。如“A”<“a” ;
- 幾個常見字母的ASCII碼大小: “A”為65;“a”為97;“0”為 48。
有了這些性質(zhì),就能得到一些規(guī)律(這里簡單列舉幾個,讀者可以自己發(fā)掘更多):
- 數(shù)字轉(zhuǎn)字符:
char ch = num + '0';
- 字符轉(zhuǎn)數(shù)字:
int num = ch - '0';
- 大寫字母轉(zhuǎn)小寫字母:
char lowerch = upperch + 32;
- 小寫字母轉(zhuǎn)大寫字母:
char upperch = lowerch + 32;
End
感謝大家的觀看!字符轉(zhuǎn)換永遠(yuǎn)是基礎(chǔ)中的基礎(chǔ),希望大家都能熟練掌握這些技巧,讓它們成為我們成功路上的墊腳石!
這里是 YLCHUP,拜拜ヾ(?ω?`)o