C語言字符

 

       在實際開發中,程序員很少用單個字符來表示一個完整的數據,字符的意義主要作爲數組的時候可以形成一個字符串。在本章節中,我們更關心字符與整數之間的關係和ASCII碼的相關知識。

       字符類型char,只能用單引號' '來包圍,不能用雙引號" "包圍。而字符串只能用雙引號" "包圍,不能用單引號' '包圍。

輸出字符使用 %c,輸出字符串使用 %s。

ASCII碼錶

       ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是基於拉丁字母的電腦編碼系統,用於顯示現代英語和其他西歐語言,它是現今最通用的單字節編碼系統。

       ASCII碼規範於1967年第一次發佈,它包含了33個控制字符(具有某些特殊功能但是無法顯示的字符)和95個可顯示字符。

1、ASCII 控制字符 (字符編碼: 0-31)

       在ASCII碼錶中,前32個字符是不能用於顯示的編碼,而是用於控制外圍設備。

十進制
DEC

符號
Symbol

中文解釋
Description

0

NULL

空字符

1

SOH

標題開始

2

STX

正文開始

3

ETX

正文結束

4

EOT

傳輸結束

5

ENQ

詢問

6

ACK

收到通知

7

BEL

8

BS

退格

9

HT

水平製表符

10

LF

換行鍵

11

VT

垂直製表符

12

FF

換頁鍵

13

CR

回車鍵

14

SO

移出

15

SI

移入

16

DLE

數據鏈路轉義

17

DC1

設備控制 1

18

DC2

設備控制 2

19

DC3

設備控制 3

20

DC4

設備控制 4

21

NAK

拒絕接收

22

SYN

同步空閒

23

ETB

傳輸塊結束

24

CAN

取消

25

EM

介質中斷

26

SUB

替換

27

ESC

換碼符

28

FS

文件分隔符

29

GS

組分隔符

30

RS

記錄分離符

31

US

單元分隔符

2、ASCII 可打印字符 (字符編碼: 32-127)

       32~126(共95個)是字符:32是空格,其中48~57爲0到9十個阿拉伯數字,65~90爲26個大寫英文字母,97~122號爲26個小寫英文字母,其餘爲一些標點符號、運算符號等。第127個字符表示的是鍵盤上的刪除命令。

十進制
DEC

符號
Symbol

中文解釋
Description

32

 

空格

33

!

感嘆號

34

"

雙引號

35

#

井號

36

$

美元符

37

%

百分號

38

&

39

'

單引號

40

(

左括號

41

)

右括號

42

*

星號

43

+

加號

44

,

逗號

45

-

連字號或減號

46

.

句點或小數點

47

/

斜槓

48

0

0

49

1

1

50

2

2

51

3

3

52

4

4

53

5

5

54

6

6

55

7

7

56

8

8

57

9

9

58

:

冒號

59

;

分號

60

<

小於

61

=

等號

62

>

大於

63

?

問號

64

@

電子郵件符號

65

A

大寫字母 A

66

B

大寫字母 B

67

C

大寫字母 C

68

D

大寫字母 D

69

E

大寫字母 E

70

F

大寫字母 F

71

G

大寫字母 G

72

H

大寫字母 H

73

I

大寫字母 I

74

J

大寫字母 J

75

K

大寫字母 K

76

L

大寫字母 L

77

M

大寫字母 M

78

N

大寫字母 N

79

O

大寫字母 O

80

P

大寫字母 P

81

Q

大寫字母 Q

82

R

大寫字母 R

83

S

大寫字母 S

84

T

大寫字母 T

85

U

大寫字母 U

86

V

大寫字母 V

87

W

大寫字母 W

88

X

大寫字母 X

89

Y

大寫字母 Y

90

Z

大寫字母 Z

91

[

左中括號

92

\

反斜槓

93

]

右中括號

94

^

音調符號

95

_

下劃線

96

`

重音符

97

a

小寫字母 a

98

b

小寫字母 b

99

c

小寫字母 c

100

d

小寫字母 d

101

e

小寫字母 e

102

f

小寫字母 f

103

g

小寫字母 g

104

h

小寫字母 h

105

i

小寫字母 i

106

j

小寫字母 j

107

k

小寫字母 k

108

l

小寫字母 l

109

m

小寫字母 m

110

n

小寫字母 n

111

o

小寫字母 o

112

p

小寫字母 p

113

q

小寫字母 q

114

r

小寫字母 r

115

s

小寫字母 s

116

t

小寫字母 t

117

u

小寫字母 u

118

v

小寫字母 v

119

w

小寫字母 w

120

x

小寫字母 x

121

y

小寫字母 y

122

z

小寫字母 z

123

{

左大括號

124

|

垂直線

125

}

右大括號

126

~

波浪號

127

 

刪除

3、轉義字符

       對於 ASCII 編碼,0~31(十進制)範圍內的字符爲控制字符,它們都是看不見的,不能在顯示器上顯示,甚至無法從鍵盤輸入,只能用轉義字符的形式來表示。

       不過,直接使用 ASCII 碼記憶不方便,也不容易理解,所以,針對常用的控制字符,C語言又定義了簡寫方式,完整的列表如下:

轉義字符

意義

ASCII碼值

使用頻率

\n

換行(LF) ,將當前位置移到下一行開頭。

10

每天都用

\'

單引號。

39

常用

\"

雙引號。

34

常用

\\

反斜槓。

92

常用

\r

回車(CR)

13

不常用

\t

水平製表(HT) 。

9

從未使用

\v

垂直製表(VT)。

11

從未使用

\a

響鈴(BEL)。

7

從未使用

\b

退格(BS) ,將當前位置移到前一列。

8

從未使用

\f

換頁(FF),將當前位置移到下頁開頭。

12

從未使用

       \n是最常用的轉義字符,表示換行,讓文本從下一行的開頭輸出,前面的章節中已經多次使用。

       \r\n用於windows平臺DOS格式文件的換行。

       單引號、雙引號、反斜槓是特殊的字符,不能直接表示。

       單引號是字符類型的開頭和結尾,要使用\'表示。

       雙引號是字符串的開頭和結尾,要使用\"表示。

       反斜槓是轉義字符的開頭,要使用\\表示

 

       示例(book68.c)

       

       運行結果

       

 

字符就是整數

       字符和整數沒有本質的區別。可以給 char 變量一個字符,也可以給它一個整數;反過來,可以給 int 變量一個整數,也可以給它一個字符。

       char 變量在內存中存儲的是字符對應的 ASCII 碼值。如果以 %c 輸出,會根據 ASCII 碼錶轉換成對應的字符,如果以 %d 輸出,那麼還是整數。

       int 變量在內存中存儲的是整數本身,如果以 %c 輸出時,也會根據 ASCII 碼錶轉換成對應的字符。

       也就是說,ASCII 碼錶將整數和字符關聯起來了。

       char類型佔內存一個字節,signed char取值範圍是-128-127,unsigned char取值範圍是0-255。

       描述再準確一些,在char的取值範圍內(0-255),字符和整數沒有本質區別。

       示例(book67.c)

       

 

       運行結果

       

       在ASCII碼錶中,E、F、G、H 的值分別是 69、70、71、72。

常用的庫函數

       以下是常用的字符函數,必須掌握。

       int isalpha(int ch);  若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0。

       int isalnum(int ch);  若ch是字母('A'-'Z','a'-'z')或數字('0'-'9'),返回非0值,否則返回0。

       int isdigit(int ch);   若ch是數字('0'-'9')返回非0值,否則返回0。

       int islower(int ch);  若ch是小寫字母('a'-'z')返回非0值,否則返回0。

       int isupper(int ch);  若ch是大寫字母('A'-'Z')返回非0值,否則返回0。

       int tolower(int ch);  若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')。

       int toupper(int ch);  若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')

       以下是不常用的字符函數,極少使用,瞭解即可。

       int isascii(int ch);  若ch是字符(ASCII碼中的0-127)返回非0值,否則返回0。

       int iscntrl(int ch);  若ch是作廢字符(0x7F)或普通控制字符(0x00-0x1F),返回非0值,否則返回0。

       int isprint(int ch);  若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否則返回0。

       int ispunct(int ch);  若ch是標點字符(0x00-0x1F)返回非0值,否則返回0。

       int isspace(int ch);  若ch是空格(' '),水平製表符('/t'),回車符('/r'),走紙換行('/f'),垂直製表符('/v'),換行符('/n'),返回非0值,否則返回0。

       int isxdigit(int ch); 若ch是16進制數('0'-'9','A'-'F','a'-'f')返回非0值,否則返回0。

課後作業

1、研究ascii碼錶,重點關心幾個問題:

       1)字母'A'-'Z'、'a'-'z'和數字'0'-'9'的ascii碼值是不是連續的?

       2)字母'A'和'a'、'Z'和'z'的ascii碼值的差是多少?

2、根據上面的研究結果,自己編寫函數,實現字符操作常用的庫函數的功能,函數的聲明如下:

       int ISALPHA(int ch);    // 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0。

       int ISALNUM(int ch);   // 若ch是字母('A'-'Z','a'-'z')或數字('0'-'9'),返回非0值,否則返回0。

       int ISDIGIT(int ch);     // 若ch是數字('0'-'9')返回非0值,否則返回0。

       int ISLOWER(int ch);   // 若ch是小寫字母('a'-'z')返回非0值,否則返回0。

       int ISUPPER(int ch);    // 若ch是大寫字母('A'-'Z')返回非0值,否則返回0。

       int TOLOWER(int ch);  // 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')。

       int TOUPPER(int ch);   // 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')

3、自定義一個函數,函數名是ctoi,利用ASCII碼的運算,把字符的'0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'轉換爲整數的0、1、2、3、4、5、6、7、8、9。函數的聲明如下:

       int ctoi(const char chr);

       chr爲用字符方式表示的數字,函數的返回值爲數字的整數。

       提示:不允許用if和switch語句,只能用ASCII碼運算。

       調用示例:

       printf("'0' is %d\n",ctoi('0'));    // 輸出結果是'0' is 0

       printf("'9' is %d\n",ctoi('9'));    // 輸出結果是'9' is 9

4、編寫示例程序,測試char和unsigned char賦值超過取值範圍的後果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章