一、用一维字符数组存放字符串
c语言本身并没有设置一种类型来定义字符串变量,字符串的存储完全依赖于字符数组,但字符数组又不等于是字符串变量
c语言对字符串的约定:字符串借助字符型一维数组来存放,并以字符‘\0’作为字符串结束标志
c语言中表示字符串常量的约定:c语言 中没有字符串数据类型,但允许使用“字符串常量”,这时不需要人为在末尾加“\0”.
c语言中字符串常量给出的是地址值,指向字符串的首地址
1.通过赋初值的方式给一维字符数组赋字符串
char str[10]={'s','t','r','i','n','g','!','\0'}; /* 以一般数组赋初值de方式给一维数组赋初值(数组的大小应该比它将要实际存放的最长字符串多一个元素,从而给‘\0’留有空间 */
char str1[ ]={'s','t','r','i','n','g','!','\0'}; /* 一定要人为加入'\0' */
char str2[ ]={'s','t','r','i','n','g','!'}; /* 这总情况不能认为str2中存放了字符串 */
char str[10]="string!" ; /* 直接赋字符串常量,由于“string!”是字符串常量,系统会自动加入‘\0’ */
char str[ ]="string!"; /*系统将按字符串中实际的字符个数来定义数组的大小 */
注:字符数组只要所赋初值的字符个数少于数组的元素个数时,系统都会自动在其后的元素中加入‘\0’,当空间不够
用时,将会占用一个不属于数组的空间,这有可能会破坏其他数据或程序代码。
二、使指针指向一个字符串
1.通过赋初值的方式使指针指向一个字符串
char ps1= “form one”; / 不要误以为是将字符串赋给了ps1,实际ps1指向了字符串的第一个字符f */
char str[ ]=“form one”, ps2=str;
/ 定义指针变量ps2的同时,把存放字符串的字符数组str的首地址作为初值赋给了它,使ps2指向了字符串的f */
2.通过赋值运算使指针指向一个字符串
char *ps1;
ps1 = "form one";
char str[ ] = "form two", *ps2;
ps2 = str; /*等价于ps2 = &str[0]; */
3.用字符数组作为字符串和用指针指向的字符串之间的区别
char mark[ ]="PROGRAM";
char *pmark = "PROGRAM";
/* mark总代表一个固定的存储空间,不可改变其值。而指针pmark中的地址可以改变而指向另外一个长度不同的字符串。
一旦pmark指向新的字符串而没有另一个指针指向原来的字符串,则此字符串将“丢失”*/
三、字符串的输入和输出
1.用格式说明符%s进行整串输入和输出
scanf("%s",str_adr); */ 在scanf函数中使用格式说明符%s可以实现字符串的整体输入,这里str_adr是地址,可以是:字符数 组名、字符数组元素的地址或字符指针变量 */
说明:(1)用%s格式输入字符串时,空格和回车符都作为输入数据的分隔符而不能被读入
(2)若输入字符串的长度超过字符数组所能容纳的字符个数时,系统并不报错。相当于下标越界
(3)当输入项为数组元素的地址时,输入的字符将从这一元素开始依次存放在该数组中。
(4)当输入项为字符指针时,该指针变量必须已指向确定的有足够空间的连续存储单元。
2.在printf函数中使用格式说明符%s可以实现字符串的整体输出
printf("%s",str_adr)
3.调用gets、puts函数在终端输入或输出一行字符串
(1)gets函数调用形式:
gets(str_adr);
说明:gets函数用来从终端键盘读入字符串(包括空格符),直到输入一个换行符为止,换行符读入后,不作为字符串的内 容,系统将自动用"\0"代替
(2)puts函数调用形式
puts(str_adr);
说明:调用puts函数时,将从这一地址开始,依次输出存储单元中的字符,遇到第一个“\0”即结束输入,并自动输出一个换 行符。
四、用于字符串处理的函数
1.字符串复制函数strcpy。调用形式如下:
strcpy(s1,s2); /* 作用是把s2所指字符串的内容复制到s1所指的空间中,函数返回s1的值 */
2.字符串链接函数strcat。调用形式如下:
strcar(s1,s2); /*作用是把s2所指字符串的内容链接到s1所指的字符串后面,并覆盖s1串末尾的‘\0’,
函数返回s1所指的地址值 */
3.求字符串长度函数strlen。调用形式如下:
strlen(s); /* 函数计算以s为起始地址的字符串的长度,并作为函数值返回,这一长度不包括‘\0’ */
4.字符串比较函数strcmp。调用形式如下:
strcmp(s1,s2); /* 比较s1和s2所指字符串的大小。若s1>s2,函数值大于0;若s1=s2,函数值等于0,;
若s1<s2,函数值小于0. */