关于字符
一、 字符常量
字符常量就是用单撇号括起来的一个字符。没有赋值,只是一个括起来的字符。
二、 字符变量
字符变量:声明一个字符变量然后赋值,值就是一个字符。char类型长度为1字节,所以只能赋值一个长度字符,用单撇号括起来。
占位符:%c,每次只能读取一个字符。
三、 转义字符
因为有些符号是不能显示出来的,比如说回车符,换页,空操作符等等,我们需要使用转义字符进行处理。总结如下:
‘\n’:换行符 ‘\t’:制表符,使下一个输出的数据跳转到下一个输出区
‘\b’:退格,将当前的输出位置退回前一列处,即小时前一个已输出的字符。
‘\r’:回车,将当前的输出位置返回在本行开头.
‘\f’:换页,将当前的输出位置移到下页的开头
‘\0’:代表ASCII代表为0的控制字符,即“空操作”字符。作为字符串的结束标志。
‘\ddd’:代表1-3位八进制数所代表的字符.
‘\xhh’:1-2位十六进制数所代表的字符.
四、 字符数据与整型数据的关系
我个人认为:字符与整型变量的本质是相同的,通过ASCII码进行转换,只是表现形式不同而已,本质是一样的。例如:
int a=97;
char b=’A’;
printf(“%c”,a);
printf(“%d”,b);
我声明了整型与字符的变量,但我输出的时候用的占位符相反,也就是说:不管你输入的数据是什么形式,只看你怎么输出。这时编译器会自动执行一个隐式转换,把int->char,char->int,桥梁是ASCII码,大家可以看一个ASCII码表,‘A’就是97.
五、 字符数组
a) 关于字符数组的说明:在C语言中,字符数组就是补充没有字符串类型的缺陷而产生的,当然,字符数组的用处非仅此而已。
b) 关于字符数组的声明和初始化:
char a[10]=””;//声明一个字符数组长度为10,初始化为空
char b[]=””;//声明一个字符数组,长度未知,声明为空
char c[5]=”abcd”;//这是最标准的形式,长度为5,并且赋值为abcd
c) 关于字符串长度的说明:当我们声明一个数组的时候,如上char c[5]的长度为5个字节,但是我们只能赋值4个字节,因为系统默认会在字符串最后添加一个尾零,也就是’\0’,数组下表从0-4,即0-(n-1)
d) 尾零的作用:通常我们使用尾零判断字符串读取是否到最后,遍历字符串内容或者比较的时候用的比较多。尾零是系统自动添加且无法查看,无需人为添加。
e)
六、 字符串常量
‘a’与“a”的区别:首先,’a’是一个字符,”a”是一个字符串类型。字符类型是没有尾零的,而字符串结尾有尾零,所以说:sizeof(‘a’)=1;
sizeof(“a”)=2;
其实,C语言是没有字符串类型的,如果想使用字符串就必须用到字符数组,即:C语言中是将字符串作为字符数组来处理的。作者怕混淆概念,遂如下论述总结:
字符数组与通常的数组区别:
char a[10]=”hello C”;
charb[10]={‘h’,’e’,’l’,’l’,’o’,’ ‘,’C’};
这两个写法区别就是前者是字符数组有尾零,sizeof(a)=8;
后者是数组,存放的是字符常量,sizeof(b)=7;就差一个尾零,其他用法一致。
关于字符串的几点细节:
1、 输出字符不包括结束符’\0’
2、 用%s格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名:printf(“%s”,a);
3、 如果数组长度大于字符串的实际长度,也只输出遇到’\0’结束。
4、 如果一个字符数组中包含一个以上’\0’,则遇到第一个’\0’时输出结束
5、 可以用scanf函数输入一个字符串
scanf(“%s”,a);
6、 C语言中,数组名代表该数组首元素地址。
七、 常见的字符串函数
a) 输入一个字符串到字符数组:gets
b) 输出一个字符串到字符数组:puts
c) 连接两个字符数组中的字符串,把2接到1后:strcat(1,2);
d) 将字符串2复制到字符数组1中去:strcpy(1,2);
e) 比较字符串1与字符串2的大小,如果1>2,函数值为一个正整数。如果1<2,函数值为一个负整数。如果1=2,函数值为0。
f) 测试字符串长度:strlen(字符数组);//strlen为有效长度,sizeof为所占内存空间大小
g) 将字符串中大写字母替换成小写字母:strlwr(字符串);
h) 将字符串中小写字母替换成大写字母:strupr(字符串);
i) 将字符转换成整型变量:atoi(字符串);
八、 字符型指针
a) 字符型指针就是用指针的方法引用字符串,通过数组名和下标访问字符数组中的元素,也可以通过%s来输出一个字符串。用字符指针指向一个字符串。
b) C语言中对字符串常量是按字符数组来处理的,在内存中开辟了一个字符数组用来存放该字符串常量,但这个数组没有名字,不能通过数组名来引用,只能通过指针变量来引用。
c) 我们可以通过指针指向字符串常量,但是不能通过指针变量对该字符串常量重新赋值,因为字符串常量是不能改变的,是常量。
Char*string=”hello”;//正确的;
char *string; string=”hello”;//错误的写法,二次定义
d) 通过字符数组名或字符指针变量可以输出一个字符串。而对一个数值型数组,是不能用数组名输出它的全部元素。
e) 对字符串中下标的存取,可以用下标法或指针方法。
f)
九、 做题相关规律及细节总结:
a) 大小写字母转换:小写字母’a’-‘z’的ASCII—减去32—>大写字母’A’-‘Z’的ASCII