均从谭浩强的书上所学,以后有看到其他书会补充完善。
字符串是存放在字符数组中的
1.定义
char c[10];
2.初始化
char c[10]={‘C’,’h’,’i’,’n’,’a’};
//如果初值个数小于数组长度,其余的元素自动定为空字符’\0’
char c[]={‘C’,’h’,’i’,’n’,’a’};
//数组长度为5
char c[10]={“China”};
//前5个元素为China,第6个元素为’\0’,其余4个为’\0’
char c[]={“China”};
//此时数组c的长度为6,系统在字符串常量的最后加上了空字符’\0’
3.字符数组的输入输出
①逐个字符输入输出
printf(“%c”,c[0]);
scanf(“%c”,c[0]);
②将字符串一次输入或者输出
printf(“%s”,c);
//scanf中的输入项如果是字符数组名,不要加地址符&
scanf(“%s”,c);
//例如输入:China,系统会动在China后面加一个’\0’
scanf(“%s%s%s”,str1,str2,str3);
//例如输入How are you?空格作为分隔符相当于How\0are\0you?\0
4.字符串处理函数
1.puts(字符数组)
作用:将一个字符串(以’\0’结束的字符序列)输出到终端
puts(c);
2.gets(字符数组)
作用:从终端输入一个字符串到字符数组
gets(c);
//结尾加上’\0’
3.strcat(字符数组1,字符数组2)
作用:把字符串2接到字符串1的后面,结果放在字符串1中
strcat(str1,str2);
//字符数组1必须足够大,以便容纳连接后的新字符串
//连接时取消字符串1后的’\0’,只在新串最后保留“’\0’
4.strcpy(字符数组1,字符串2)
作用:将字符串2复制到字符数组1中
//如果在复制前未对str1数组初始化或者复制,则str1个字节中的内容是无法预知的,复制时将str2的字符串和其后的’\0’一起复制到str1中,取代str1中的前面6个字符,最后4给人字符并不一定是’\0’,而是str1中原有的最后4个字节的内容
//strcpy函数将一个字符串复制到另一个字符数组中去,用赋值语句智能将一个字符赋给一个字符型变量或字符数组元素
//可以用strcpy()将字符串2中前面n个字符复制到字符数组1中去strcpy(str1,str2,2);
5.strcmp(字符串1,字符串2)
作用:比较字符串1和字符串2
//全部相同则认为两个字符串相等
//若出现不同,则以第1个不相同的字符的比较结果为准
5.字符串的引用方式
①用数组名和下标,如c[4] ,也可用数组民和格式声明如“%s”输出该字符串
②用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串
字符指针变量
*p,p是地址,*取p地址中的变量
&p,p是变量,&取p变量的地址
1.定义
char * s;
2.初始化
char * s=“I love China!”;
等价于
char * s;//定义一个char *型变量
s=“I love China!”;//把字符串第1个元素的地址赋给字符指针变量s
//s是指针变量,基本类型为字符型。s只能指向一个字符型数据,不能指向多个字符型数据。
3.字符串中字符的存取
①下标法
char a[]=“I love China!”;
*(a+2)//a是首地址*(a+2)相当于a[2]
②指针变量法
char a[]=“I love China!”;
char * p;
p=a;
//用*p表示
p++;
字符指针变量和字符数组的比较
1.初始化
指针变量的初始化:
char * s=“I love China!”;
等价于
char * s;
s=“I love China!”;
字符数组的初始化:
char c[20]=“I love China!”;
不等价于
char c;
c[]=“I love China!”;
//字符数组定义的时候可以对全部元素赋初值,但是不能定义后再用赋值语句对字符数组的全部元素赋值
2.存储单元内容
编译时为字符数组分配若干存储单元,以存放各元素的值,对字符指针变量,只分配一个存储单元
3.概念
字符指针变量的值可以改变,但是它所指向的字符常量是不可以改变的
字符数组的数组名不可以改变,但是字符数组中各元素的值是可以改变的