1、7.3 字符数组 一、 字符数组的定义 二、 字符数组的初始化 三、 字符数组的输入与输出 四、字符串处理函数 一、 字符数组的定义 字符数组 :用来存放 字符型数据 的 数组 。 格式: char 数组名 常量表达式 , ; char 数组名 常量表达式 1常量表达式 2, 例: char a10, b30; char s1020, h20100; 注意 : 字符数组的定义、引用遵循 “数组”的规定。 二、 字符数组的初始化 1)逐个字符赋给数组中的各元素: 例 char s17=s,t,r,i,n,g,!; char s2 =s,t,r,i,n,g,!; 1、一维字符数组初始化 例 :ch
2、ar s310=C,h,i,n,a; C h i n a 0 0 0 0 0 s t r i n g ! 例 : char s48=“string!“; 或 char s48=“string!“; 或 char s4=“string!“; 等价于 :char s48=s,t,r,i,n,g,!,0; 2)用字符串常量初始化数组中的各元素 : s t r i n g ! 0 在字符数组中,并不要求它最后的一个字符为 “0“ ,也可以没有 “0“。 例: char s7=“String! “; 也是合法的 字符串在实际存储时,是用 字符数组 存储的,系统会自动的在其尾部添加一个结束标志 0。 0代
3、表 ASCII码为 0的字符 S t r i n g ! 2、二维字符数组初始化 二维字符数组的初始化,可以采用逐个字符式或者字符串常量的方式 例: char name26= J,o,h,n,0, M,a,r,r,y,0 ; char name26=“John“,“Marry“; char name26=“ John“, “Marry“; 注意 : 二维字符数组可以看做是包含多个字符串的一维数组 J o h n 0 0 M a r r y 0 三、 字符数组的输入与输出 1.利用格式符 %c 逐个输入、输出字符: void main() char str10; int i; for ( i=0
4、; i void main( ) char string80; printf(“Input a string:“); gets(string); puts(string); 输入 : How are you? 输出 : How are you ? H o w a r e y o u ? 0 puts( )函数一次输出一个字符串,并自动换行。 printf( )函数可以同时输出多个字符串,并且能灵活控制是否换行。 gets()函数可以接收包含空格、 tab的字符串。 scanf()不能接收空格 四、字符串处理函数 C语言提供了很多字符串操作函数,其对应的头文件为 1 测字符串长度函数 strle
5、n 格式: strlen(字符数组名或字符串常量 ) 作用:计算字符串 (以 0结束)的 有效长度 , 它的返回值是字符串中字符的个数 ( 不包含 0 )。 例: char str12=“computer“; printf(“%d “, strlen(str); printf(“%d“, strlen(“computer“); 输出 : 8 8 c o m p u t e r 0 0 0 0 str for(i=0;str1i!=0;i+) ; i的值等价于 strlen(str1) 例: 函数 strlen( )的使用。 #include #include void main() int i
6、; char str120; gets(str1); printf(“%s : %dn“,str1,strlen(str1); 输入: Good luck 输出 : Good luck: 9 2 字符串拷贝函数 strcpy 格式: strcpy(字符数组 1,字符串 2) 作用:将字符串 2复制到字符数组 1中。 注意: ( 1) 字符数组 1必须足够大,以便容纳字符串 2的内容。 ( 2) 字符串 2可以是 字符数组名 或者 字符串常量 。当字符串 2为字符数组名时,只复制第一个 0前面的内容(含 0 ),其后内容不复制。 ( 3) 不能使用赋值语句为一个字符数组赋值 例 char str
7、120,str220; str1= “Hello! “; () str2=str1; () strcpy(str1, “hello“); strcpy(str2,str1); 例: 函数 strcpy( )的使用。 #include main( ) int i; char str120,str2 =“Good luck“; strcpy(str1,str2); printf(“str1: %sn str2 : %sn“,str1,str2); 输出 : str1:Good luck str2:Good luck for (i=0;str2i!=0;i+) str1i=str2i; str1i=
8、0; 3字符串连接函数 strcat 引用形式: strcat(字符数组 1,字符串 2) 作用:将字符串 2的内容复制连接在字符数组 1的后面,其返回值为字符数组 1的地址。 注意: ( 1)字符数组 1只能是 字符数组名 ,并且必须足够大,以便可以继续容纳字符串 2的内容。 ( 2)连接后字符数组 1的 0将被字符串 2覆盖,连接后生成的新的字符串的最后保留一个 0 。 #include void main( ) char str112=“Good “; char str2 =“luck! “; strcat(str1,str2); printf(“%s“,str1); 例: 函数 str
9、cat( )的使用。 其状态如下: 输出 : Good luck! str1 str2 G o o d 0 0 0 0 0 0 0 l u c k ! 0 G o o d l u c k ! 0 0 str1 4字符串比较函数 strcmp 格式: strcmp(字符串 1,字符串 2) 功能:比较两个字符串 比较规则:对两串从左向右逐个字符比较( ASCII码), 直到遇到不同字符或 0为止 返 回 值:返回 int型整数, a. 若字符串 1 字符串 2, 返回正整数 0 c. 若字符串 1 = 字符串 2, 返回零 =0 说明: 字符串比较不能用“ =” 、“ 0 r #include
10、void main( ) char username10, name10=“zhangsan“; gets( username ); if ( strcmp(username,name)=0 ) printf(“welcome !n“); else printf(“ Username are wrong !n“); puts( username ); 例 7.8 输入一行字符,统计其中有多少个单词,单词之间用空 格分隔。 当前字符 =空格 是 否 未出现新单词,使 word=0,num不累加 前一字符为空格 (word=0),新单词出现 , word=1,num加 1 前一字符为非空格 (wo
11、rd=1),未出现新单词 ,num不变 num: 统计单词个数 word:作为判别是否是单词的标志,取值为 0或 1 char string:存储一行字符 输入一字符串给 string i=0 num=0 word=0 当 (c=stringi)!=0) c=空格 真 真 假 假 word=0 word=1 num=num+1 i=i+1 输出: num word=0 #include void main( ) char string81; int i,num=0,word=0; char c; gets(string); for (i=0;(c=stringi)!=0;i+) if (c=
12、= ) word=0; else if (word= =0) word=1; num+; printf(“There are %d words in the linen“,num); 例 7.9有三个字符串 (长度不超过 20),要求找出其中最大者。str0 str1 str2 string 大 大 H o w 0 H e l l o 0 H i g h 0 str0 str1 str2 #include #include void main( ) char string20,str320; int i; for(i=0;i0) strcpy(string,str0); else strcpy(string,str1); if (strcmp(str2,string)0) strcpy(string,str2); printf(“nthe largest string is:n%sn“,string); 作业 书面作业:教材 P152 -153 : 7.10 习题册第五单元:四、 13, 15 上机作业:教材 P152 -153 : 7.5, 7.6, 7.13 习题册第五单元:四、 12