目录
一,字符数组是什么?
用来存放字符数据的数组(字符串),字符数组中的各元素依次存放字符串的各字符
二,定义
char 数组名[常量表达式];
例: char c[9];
C数组具有6个元素,可以存放长度小于或等于5的字符串
三,字符串的储存
例: char c[10]="c program";
该数组在计算机中储存形式为:
c[0] | c[1] | c[2] | c[3] | c[4] | c[5] | c[6] | c[7] | c[8] | c[9] |
c | p | r | o | g | r | a | m | \0 |
注:字符串实际占有单元的数量等于字符串长度+1
四,字符数组初始化
1.用单个字符串对字符数组初始化
例: char c[10]={'c','','p','r','o','g','r','a','m','\0'};
(把10个字符依次赋给c[0]~c[9]这10个元素)
c[0] | c[1] | c[2] | c[3] | c[4] | c[5] | c[6] | c[7] | c[8] | c[9] |
c | p | r | o | g | r | a | m | \0 |
- 如果在定义字符数组是不进行初始化,则数组中各元素的值是不可预料的
- 如果花括号中提供的初始个数(即字符个数)大于数组长度,则程序语法错误
- 如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度
- 如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为字符串(即'\0')
2.用字符串常量对字符数组初始化
例:
(1) char str[6]={"CHINA");
(2) char str[6]="CHINA";
(3) char str[]="CHINA";
(4) char c[12]={"HOW ARW YOU"};
与 char c[]={'H','O','W','','A','R','W','','T','O','U'};
- 将字符串储存到字符数组中,字符串和第一个'\0'构成有效字符串。对字符串的操作,就是对字符数组的操作
- 普通数组中的元素是确定的,一般用下标控制循环;而字符串使用结束符'\0'来控制循环
五,字符数组的输入输出
1.单个字符输入输出(用格式符%c或字符输入函数)
#include<stdio.h>
int main ()
{
char c[5];
int i;
for(i=0;i<5;i++)
scanf("%c",&c[i]);
for(i=0;i<5;i++)
printf("%c",c[i]);
printf("\n");
return 0;
}
2.字符串整体和部分输入输出(用格式符%s)
char str[6];
scanf("%s",str);
- 输入输出必须是以字符串的地址形式出现
- 也可以是字符串常量:printf (“%s\n","book");
- 只能输入不包括空格、\t和\n的字符串
- 如果要输入空格,用gets函数
- 数组名前不加&符号
例:
char str[10];
scanf("%s",str);
printf("%s\n",str);
输入:how are you
输出: how
注:用%s输出字符串时,从输出项提供的地址开始输出,直到遇到字符结束串'\0'为止
六,字符串处理函数
puts 输出字符串
gets 输入字符串
(使用时注意程序前加:#include<stdio.h>)
strcat 字符串连接
strcpy 字符串复制
strcmp 字符串比较
strlen 字符串长度
strlwr 将字符串中大写转换为小写字母
strupr 将字符串中小写转换为大写字母
(使用时注意程序前加:#include<string.h>
1.puts函数
形式:puts(字符数组)
作用:是将一个字符串(以'\0'结束的字符序列)输出到终端并换行
int main()
{
char str[]={"Chain"};
puts(str);//其作用等价printf("%s",str);
2.gets函数
形式:gets(字符数组)
作用:从终端输入一个字符串到字符数组,并且得到一个函数值。其可以输入带空格的字符串,用scanf的%s格式不行
int main()
{
char str[6];
gets(str);
puts(str);
}
输入:how are you
输出:how are you
3.strcat函数
形式:strcat(字符数组1,字符数组2)
作用:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址
char str1[30]={"people's Republic of"};
char str2[]={"Chain"};
printf("%s",strcat(str1,str2));
输出:People's Republic of China
4.strcpy函数
形式:strcpy(字符数组1,字符串2)
作用:将字符串2复制到字符数组1中
char str[10],str2[]={"China"};
strcpy(str1,str2)
//不能用str1=str2来赋值
//字符数组1的长度不应小于字符串2的长度
5.strcmp函数
形式: strcmp(字符串1,字符串2)
作用:比较字符串1和字符串2
1.)确定字符串大小的基本原则:
按照串中对应位置字符的ASC||码值的大小确定大小
2.)比较结果由函数值带回(返回两个字符之差)
- 如果字符串1=字符串2,函数值为0
- 如果字符串1>字符串2,函数值为正整数
- 如果字符串1<字符串2,函数值为负整数
6.strlen函数
形式:strlen(字符数组)
作用:测试字符串长度的函数。函数的值为字符串中的数据长度(不包括’\0'在内)
char str[10]={"China"};
printf("%d",strlen(str));
//输出结果表示10,而是5,也可以直接测试字符串常量的长度,如strlen("China");
7.strlwr函数
形式:strlwr(字符串)
作用:将字符串中大写字母转换为小写
8.strupr函数
形式:strupr(字符串)
作用:将字符串中小写字母转换为大写