关于字符类型

编码规范的本质

计算机只能储存数字,不能存字符,如果我们要储存字符就要用到编码规范,当使用某个字符时,通过编码规范,把对应得到数字显示成它对应的字符,当我们要储存某个字符时,也是通过编码规范,储存它所对应的数字,编码规范就像一本字典,里面储存的是数字和字符一一对应的关系。

知识扩展*:计算机里面储存的都是数字,图片、影音、文件等都是以数字的形式储存在里面

字符类型

类型

内存占用(字节)

说明

char

1

ASCII字符

wchar_t

2

宽字节字符(采用utf-16标准或utf-32标准)

char16_t

2

utf_16字符

char32_t

4

utf_32字符

在ASCII中,两个char才能显示中文,为了解决这个问题,引入了宽字节字符,一个wchar_t就能显示中文,在VS2019,采用utf-16标准,在其他编译器下,可能会采用其他标准,比如utf_32,并不稳定。另外它显示英文时也是占用两个字节

char

所有的char类型都是数字,都可以进行加减,只不过优先被表现成了字符

char charA {'A'};
char charA1 {65};
charA++;
std::cout<< charA <<charA1;

这两个charA输出后都是A

wchar_t

wchar_t wcharA {L'A'};
wchar_t wcharB {L'我'}
std::cout<<whcarA;
std::wcout<<wcharA;
std::cout<<wcharB;
std::cout<<sizeof(wcharA)<<sizeof(wcharB);
std::wcout<<wcharB;
  1. 赋值的时候前面都要加上L,用以表示这是个宽字节字符

  1. 第3行输出结果为65,说明cout不支持wchar_t的编码规范,仅支持char类型 的编码规范,要用wcout来输出

  1. cout输出wcharB时,会输出25105,说明中文的数字编码比英文编码大很多

  1. 第6行输出了2和2,说明无论是中文还是英文,wchar_t都是2字节

  1. 最后一行wcout输出了一个空格,说明它输出中文时不支持,需要设置头文件

设置头文件

#include<locale>
#include<iostream>
setlocale(LC_ALL,"chs");
wchar_t wcharA {'我'};
std::wcout<<wcharA;

要想输出中文,要调用头文件locale,并且通过setlocale函数设置中文

char16_t、char32_t

char16_t char16 {u'a'};
char32_t char32 {U'A'};
  1. 前面加u,表示采用utf-16标准,前面加U,采用utf-32标准

  1. wcout和cout都不支持16标准和32标准,所以用这两个输出后结果都为65

ASCII编码表

换行对应了10

std::cout<<A<<(char)10;

这里能换行

0对应了表里面的48

1对应了49

...

9对应了57

可以依照ACSII顺序给0-9进行排序,比如要给身份证号进行排序时,可以采用ASCII 表。

字符处理函数

使用前应引入头文件<cctype>

int isupper(char)

判断字符是否为大写字母

int islower(char)

判断字符是否为小写字母

int isalpha(char)

判断字符是否为字母

int ispunct(char)

看看字符是否为标点符号

int tolower(char)

将字符转换称小写

int toupper(char)

将字符转换称大写

字符 的核心

字符的储存:字符->编码表->二进制数字

字符的读取:二进制数字->编码表->字符

编码表包括Unicode、GBK等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值