C++字符
字符
C++不但可以处理数字类型的值,也可以处理字符。字符数据类型(char)代表一个单独的字符。一个字符被单引号括起来,如:
char lettter = 'A';
char number = '0';
要注意这里的0不再是数字类型(int,double,float,long),而是字符(char)类型。
这里还有一点要注意,之后讲到的字符串类型(string)使用""括起来的,所以"A"是字符串类型而不是字符类型。
ASCII码
众所周知,计算机只能识别0和1,那么计算机是如何识别字母,汉字或者其他语言呢。这里涉及到编码,即把一个字符映射为二进制数。而ASCII是比较原始的一种编码方式。常用的有数字('0'~'9',对应ASCII值48~57),大写字母('A'~'Z',对应ASCII值65~90),小写字母(''a~'z',对应ASCII值97~122)。详细的ASCII可以上网搜搜看,这里就不过多赘述了。
因为ASCII码只涉及到英文字母和一些英文符号,不能满足其他国家的需求,所以后来又出现了很多编码方式,如GBK,Unicode(万国码)等,其中又分为UTF-8, UTF-16等,汉字在UTF-8中常占3个字节,也有4个字节的。当然,这里主要介绍ASCII,额外的就不过多介绍了。
如何从键盘读入一个字符呢?见下面的代码:
cout << "Enter a character: " << endl;
char ch;
cin >> ch;
cout << "The character you entered is " << ch << endl;
转义序列
看下面一句代码
cout << "He said "I like C++"" << endl;
我们的本意是输出:He said "I like C++" ,但是程序以为我们的字符串只有: "He said " ,所以会报一个编译错误。想想也是理所应当的,否则的话就会有二义性了。
C++为了解决这一问题,使用了一种特殊符号——转义字符,来表示一下特殊符号。转义序列都是以一个反斜线打头,后面跟着一个字符。转义序列被看做一个整体,不可分割。详见下表:
转义序列 | 名称 | ASCII码 |
\b | 回退符 | 8 |
\t | 制表符 | 9 |
\n | 换行符 | 10 |
\f | 换页符 | 12 |
\r | 回车符 | 13 |
\\ | 反斜线 | 92 |
\" | 双引号 | 34 |
所以,之前的语句可以表示为:
cout << "He sai \"I like C++\"" << endl;
数值与字符的转换:
//1. 隐式类型转换
int i = 'A';
cout << "i is " << i <<endl;
//显示结果:65
//因为A的ASCII码为65
char c = 65;
cout << "c is " << c << endl;
//显示结果:A
//因为ASCII码为65所对应的字符为A
//2. 显式类型转换
int j = 'A' + 2;
//j的值为67
cout << j << " is the ASCII code for character " << static_cast<char>(j) << endl;
//显示 结果:67 is the ASCII code for character C
//static_cast<char>(value)的<>中的是要转换为的类型
字符之间的比较(实际上比较的是他们的ASCII码)
'a' < 'b' 返回true,因为a的ASCII码是97,b的ASCII码是98
'a' < 'A' 返回false,因为a的ASCII码是97,A的ASCII码是65
字符函数
函数 | 描述 |
isdigit(ch) | 如果ch是数字,返回true |
isalpha(ch) | 如果ch是字母,返回true |
isalnum(ch) | 如果ch是数字或字母,返回true |
islower(ch) | 如果ch是小写字母,返回true |
isupper(ch) | 如果ch是大写字母,返回true |
isspace(ch) | 如果ch是空白字符,返回true |
tolower(ch) | 返回ch的小写形式 |
toupper(ch) | 返回ch的大写形式 |