0字符数组概念
(0)字符的ASCII值
标准ASCII码的范围是0~127,其中包含了控制字符或通信专用字符(不可显示)和常用的可显示字符。
0~9,A~Z,a~z等都是可显示字符,他们的ASCII码分别是48~57,65~90,97~122
字符常量必须用单引号标注起来,以区分是作为字符变量还是字符常量出现。
(1)字符数组的存储
字符数组是由若干个char类型的元素组成,因此字符数组的每一位都是一个char字符。除此之外,在一维字符数组(或二维字符数组的第二维)的末尾都有一个空字符 \0 一表示存放的字符串结尾。空字符\0在使用gets或scanf输入字符串时会自动添加在输入的字符串后面,并占用一个字符位,而puts与printf就是通过识别\0作为字符串的结尾来输出的。
1 字符数组的初始化
(1)和数组一样的初始化
str[5]={'G','o','o','d'};
(2)直接赋值初始化
char str[5]="Good";
仅限于初始化,程序其他位置不允许这样直接赋值整个字符串
2 字符数组的输入输出
(1)scanf输入 printf输出
scanf对字符类型有%s,%c两种格式(printf同理,下同),其中%c用来输入单个字符,%s用来输入一个字符串并存在字符数组里。%c能识别空格跟换行并将其输入,%s能够通过空格或换行来识别一个字符串的结束。
(2)getchar输入putchar输出
getchar用来输入单个字符,putchar用来输出单个字符。
getchar能识别换行符。
(3)gets输入puts输出
gets用来输入一行字符串(注意:gets识别换行符\n作为结束,因此scanf完一个整数后,如果要使用gets,需要先用getchar接收整数后的换行符),并将其存放于一维数组(或二维数组中的一维)中;puts用来输出一行字符串,即将一维数组(或二维数组的一维)在界面上输出,并紧跟一个换行。
注意:1结束符\0的ASCII码为0,即空字符NULL,占用一个字符位,因此开字符数组的时候前往要记得字符数组的长度一定要比实际长度至少多1。注意:int型数组的末尾不需要加\0,只有char型数组需要。还要注意\0跟空格不是一个东西,空格的ASCII码是32切勿混淆。
2如果不是使用scanf函数的%s格式或gets函数输入字符串(例如使用getchar),请一定要在输入的每一个字符串后加“ \0 ”,否则printf和puts输出字符串会因无法识别字符串末尾而输出一大堆乱码。
3 strin.h头文件函数
(0)memset函数
memset可以对数组中每一个元素赋以相同的值,使用memset需要在程序开头添加string.h头文件,且只建议初学者使用memset赋0或-1。这是因为memset使用的是按字节赋值,即对每个字节赋同样的值,这样组成int型的4个字节就会被赋成相同的值。而由于0的二进制补码全为0,-1的二进制补码全为1,不容易弄错。如果要对数组赋值其他数字(例如1),那么请使用fill函数(但memset的执行速度快)。
memset函数的格式为 : memset(数组名,值,sizeof(数组名));
(1)strlen()
strlen函数可以得到字符数组中第一个\0前的字符的个数,其格式如下:
strlen ( str ); //返回str的字符串长度
(2)strcmp()
strcmp函数返回两个字符串大小的比较结果,比较原则是按字典序,其格式如下:
strcmp ( str1 ,str2 )
if st1<str2 返回一个负数
if str1=str2 返回0
if str1>str2 返回一个正整数
所谓字典序就是字符在字典中的顺序,
(3)strcpy()
strcpy函数可以把一个字符串复制给另一个字符串,其格式如下:
strcpy ( str1 , str2 ) // 把str1复制给str2
(4)strcat()
strcat()可以把一个字符串接到另一个字符串后面,其格式如下:
strcat ( str1 , str2 ) //把str2接到st1后面
4 sscanf与sprintf
sscanf与sprintf是处理字符串的利器,sscanf从单词上可以理解为string+scanf,ssprinf可以理解为string+printf,均在stdio.h头文件下。