4.1. Belgilar (Chars)

Shu paytgacha biz ko'rib chiqqan asosiy ma'lumotlar turlari raqamlarni (butun sonlar va suzuvchi nuqta) yoki haqiqiy/noto'g'ri qiymatlarni (booleanlar) ushlab turish uchun ishlatilgan. Ammo, agar biz harflarni saqlamoqchi bo'lsak?

#include <iostream>
 
int main()
{
    std::cout << "Til o'rganishni xohlaysizmi? (y/n)";
 
    // Biz foydalanuvchiga "y" yoki "n" belgilarini 
    // kiritishni xohlaymiz
    // Buni qanday qilamiz?
 
    return 0;
}

Char ma'lumotlarining turi belgini ushlab turish uchun mo'ljallangan. Belgilar bitta harf, raqam, belgi yoki bo'sh joy bo'lishi mumkin.

Char ma'lumotlarining turi ajralmas tipdir, ya'ni asosiy qiymat butun son sifatida saqlanadi. Mantiqiy 0 qiymati noto'g'ri va nol bo'lmagan haqiqiy deb talqin qilinganidek, char o'zgaruvchisi saqlagan butun son ASCII belgisi sifatida tushuniladi.

ASCII ma'lumot almashish uchun Amerika standart kodini anglatadi va u inglizcha belgilarni (bir nechta boshqa belgilarni) 0 dan 127 gacha bo'lgan raqamlar (ASCII kodi yoki kod nuqtasi deb ataladi) bilan ifodalashning o'ziga xos usulini belgilaydi. Masalan, ASCII kodi 97 "a" belgisi sifatida talqin qilinadi.

Belgilar har doim bitta tirnoq orasiga joylashtiriladi (masalan, 'g', '1', '').

ASCII jadvali

Code

Symbol

Code

Symbol

Code

Symbol

Code

Symbol

0

NUL (null)

32

(space)

64

@

96

`

1

SOH (start of header)

33

!

65

A

97

a

2

STX (start of text)

34

66

B

98

b

3

ETX (end of text)

35

#

67

C

99

c

4

EOT (end of transmission)

36

$

68

D

100

d

5

ENQ (enquiry)

37

%

69

E

101

e

6

ACK (acknowledge)

38

&

70

F

102

f

7

BEL (bell)

39

71

G

103

g

8

BS (backspace)

40

(

72

H

104

h

9

HT (horizontal tab)

41

)

73

I

105

i

10

LF (line feed/new line)

42

*

74

J

106

j

11

VT (vertical tab)

43

+

75

K

107

k

12

FF (form feed / new page)

44

,

76

L

108

l

13

CR (carriage return)

45

-

77

M

109

m

14

SO (shift out)

46

.

78

N

110

n

15

SI (shift in)

47

/

79

O

111

o

16

DLE (data link escape)

48

0

80

P

112

p

17

DC1 (data control 1)

49

1

81

Q

113

q

18

DC2 (data control 2)

50

2

82

R

114

r

19

DC3 (data control 3)

51

3

83

S

115

s

20

DC4 (data control 4)

52

4

84

T

116

t

21

NAK (negative acknowledge)

53

5

85

U

117

u

22

SYN (synchronous idle)

54

6

86

V

118

v

23

ETB (end of transmission block)

55

7

87

W

119

w

24

CAN (cancel)

56

8

88

X

120

x

25

EM (end of medium)

57

9

89

Y

121

y

26

SUB (substitute)

58

:

90

Z

122

z

27

ESC (escape)

59

;

91

[

123

{

28

FS (file separator)

60

<

92

\

124

|

29

GS (group separator)

61

=

93

]

125

}

30

RS (record separator)

62

>

94

^

126

~

31

US (unit separator)

63

?

95

_

127

DEL (delete)

0-31 kodlari chop etilmaydigan belgilar deb ataladi va ular asosan printerlarni formatlash va boshqarish uchun ishlatiladi. Ularning aksariyati hozir eskirgan.

32-127 kodlari bosma belgilar deb ataladi va ular ko'pchilik kompyuterlar ingliz tilidagi asosiy matnni ko'rsatish uchun foydalanadigan harflar, raqamli belgilar va tinish belgilarini ifodalaydi.

Belgilarni boshlang'ich qiymatini berish

Char o'zgaruvchilarini belgi harflari yordamida boshlashingiz mumkin:

char ch2{ 'a' }; 

Siz belgilarni butun sonlar bilan boshlashingiz mumkin, lekin iloji bo'lsa, bunga yo'l qo'ymaslik kerak

char ch1{ 97 }; 

Belgilar sonini butun sonlar bilan aralashtirib yubormaslik uchun ehtiyot bo'ling. Quyidagi ikkita boshlanish bir xil emas:

  • char ch {5}; // tamsayı 5 bilan boshlang (butun son sifatida saqlanadi).

  • char ch {'5'}; // "5" uchun kod nuqtasi bilan boshlang (butun son sifatida saqlanadi)

Belgilar raqamlari biz raqamlarni matematik operatsiyalarni qo'llash uchun emas, balki matn sifatida ko'rsatishni xohlaganimizda foydalanish uchun mo'ljallangan.

Choralarni bosib chiqarish

Charni chop etish uchun std :: cout dan foydalanilganda, std :: cout char o'zgaruvchisini ASCII belgisi sifatida chiqaradi:

#include <iostream>
 
int main()
{
    char ch1{ 'a' };   // (afzal qilingan)
    std::cout << ch1;  // cout belgini bosib chiqaradi
 
    char ch2{ 98 };   // "b" uchun kod nuqtasi (afzal emas)
    std::cout << ch2; // cout belgini bosib chiqaradi ('b')
 
 
    return 0;
}

Natija:

ab

Shuningdek, biz char harflarini to'g'ridan - to'g'ri chiqarishimiz mumkin:

cout << 'c';

Bu natijani beradi:

c

Belgilangan kenglikdagi int8_t odatda C ++ da imzolangan belgi bilan bir xil bo'ladi, shuning uchun u odatda tamsayı o'rniga char sifatida chop etiladi.

Belgilarni sonlar sifatida chop etish

Agar biz belgini belgi o'rniga raqam sifatida chiqarishni istasak, std :: coutga charni butun son kabi chop etishini aytishimiz kerak. Buning bitta (yomon) usuli - charni butun songa belgilash va butun sonni chop etish:

#include <iostream>
 
int main()
{
    char ch { 97 } ;
    int i { ch };           // ch qiymati bilan butun sonni boshlang
    std::cout << i << '\n'; // qiymatini chop eting
    return 0;
}

Eng yaxshi usul - bu type cast. Turi boshqa turdagi qiymatdan bitta turdagi qiymat hosil qiladi. Ma'lumotlarning asosiy turlarini (masalan, char dan int ga yoki aksincha) aylantirish uchun biz statik translyatsiya deb nomlangan turdan foydalanamiz.

Asosiy tushuncha Qachonki siz burchakli qavslardan foydalanadigan C ++ sintaksisini (oldingi protsessordan tashqari) ko'rsangiz, burchakli qavslar orasidagi narsa katta ehtimol bilan turga aylanadi. Odatda C ++ parametrlanadigan turga muhtoj bo'lgan tushunchalar bilan shug'ullanadi.

Bu erda biz char qiymatidan butun sonni yaratish uchun static_cast -dan foydalanaman:

#include <iostream>
 
int main()
{
    char ch{ 'a' };
    std::cout << ch << '\n';
    std::cout << static_cast<int>(ch) << '\n';
    std::cout << ch << '\n';
    return 0;
}

Natija:

a
97
a

Belgilarni kiritish

Quyidagi dastur foydalanuvchidan belgini kiritishni so'raydi, keyin belgini ham, uning ASCII kodini ham chop etadi:

#include <iostream>
 
int main()
{
    std::cout << "Klaviatura belgisini kiriting: ";
 
    char ch{};
    std::cin >> ch;
    std::cout << ch << " ASCII kodi: " << static_cast<int>(ch) << '\n';
 
    return 0;
}

Natija:

Klaviatura belgisini kiriting: q
ASCII kodi: 113

E'tibor bering, std :: cin sizga bir nechta belgilar kiritishga imkon beradi. Biroq, ch o'zgaruvchisi faqat 1 belgidan iborat bo'lishi mumkin. Binobarin, ch o'zgaruvchiga faqat birinchi kirish belgisi chiqariladi. Qolgan foydalanuvchi kiritmalari std :: cin ishlatadigan kirish buferida qoladi va uni std :: cin ga keyingi qo'ng'iroqlar yordamida chiqarib olish mumkin.

#include <iostream>
 
int main()
{
    std::cout << "Klaviatura belgisini kiriting: "; // foydalanuvchi "abcd" ga kirgan deb taxmin qiling (tirnoqsiz)
 
    char ch{};
    std::cin >> ch; // ch = 'a', "bcd" navbatda qoldirilgan.
    std::cout << ch << " ASCII kodi: " << static_cast<int>(ch) << '\n';
 
    // Eslatma: Quyidagi cin foydalanuvchidan kirishni so'ramaydi, u navbatdagi kirishni oladi!
    std::cin >> ch; // ch = 'b', "cd" navbatda qoldirilgan.
    std::cout << ch << " ASCII kodi: " << static_cast<int>(ch) << '\n';
    
    return 0;
}

Natija:

Klaviatura belgisini kiriting: abcd
a ning ASCII kodi: 97
b ning ASCII kodi: 98

Last updated