讨论1:字符串与字符数组的关系 1、例1: ①char st如=China"; C h n a 10 ②char st[=“China"; ③char st如={℃,h',中,n,a’,0; 结论1:①②③等价一-定义字符数组st,st长度是6,将字符串”China'”字符数组st。 结论2:字符串常量可以给字符数组初始化。(如①②) 2、系统自动在字符串末尾加一个0'表示结束;而字符数组并不要求最后一个字符一 定是0,甚至可以不包含10'。 例2:char st[={C,h',中,n',a';∥对,st是字符数组但不是字符串,st长度是5 h n a 好习惯:在字符数组有效字符的后面人为地加0. 例3:char st如=C,h,中,n',a',0;∥对,st是字符数组也是字符串,st长度是6 h n a 10 结论3:字符串可以用字符数组来表示, 但是字符数组不一定是字符串。(字符数组可能最后无10’)
讨论1:字符串与字符数组的关系 1、例1: ①char st[]={“China”}; ②char st[]=“China”; ③char st[]={‘C’, ‘h ’, ‘i’, ‘n’, ‘a ’, ‘\0’}; 结论1:①②③等价—-定义字符数组st,st长度是6,将字符串”China”字符数组st。 结论2:字符串常量可以给字符数组初始化。(如①②) C h i n a \0 C h i n a 2、系统自动在字符串末尾加一个‘\0’表示结束;而字符数组并不要求最后一个字符一 定是‘\0’ ,甚至可以不包含‘\0’。 例2:char st[]={‘C’, ‘h’, ‘i’, ‘n’, ‘a’}; //对,st是字符数组但不是字符串,st长度是5 好习惯:在字符数组有效字符的后面人为地加‘\0’. 例3:char st[]={‘C’, ‘h’, ‘i’, ‘n’, ‘a’,’\0’}; //对,st是字符数组也是字符串,st长度是6 C h i n a \0 结论3:字符串可以用字符数组来表示, 但是字符数组不一定是字符串。(字符数组可能最后无’\0’)
课堂练习:判断char st】="china";与下列等价? ①char st]={'c,'h','i,'n,'a',0';√ 2 char st[]={"china");V 3char stl ]=['c','h','i','n','a);X 思考:判断char st10="china'";与下列等价? ①char st[10]={'c','h',i','n','a'};V 注意: 在用字符数组来存放某个字符串常量时,如果要指 定字符数组的大小,那么其大小至少要比字符串的长度 大1(多定义一个字节用于存放八0)
课堂练习:判断char st[ ] = "china"; 与下列等价? ① char st[ ] = {'c', 'h', 'i', 'n', 'a', '\0'}; ② char st[ ] = {"china"}; ③ char st[ ] = {'c', 'h', 'i', 'n', 'a'}; 思考:判断char st[10] = "china"; 与下列等价? ① char st[10] = {'c', 'h', 'i', 'n', 'a'}; √ √ √ 注意: 在用字符数组来存放某个字符串常量时,如果要指 定字符数组的大小,那么其大小至少要比字符串的长度 大1(多定义一个字节用于存放'\0')
10.3字苻数组的输入输出 1、逐个字符输入输出 例1:for循环实现 区别: @char st[20]; 例1:必须输入20个字符 @for (i=0;i<20;i++) 例2:回车结束 ⑧ scanf(“%c”,&st[);I空格作为字符读入 ④for(i=0;ik20;i+) 同 printf(%c”,st叮)房 例2:while循环实现: ① i1=0; int i=0;char ch,st[20]; ② while(st[i]!=10') ②scanf(%c”,&chi∥第1个字符 ③ {printf((%c”,st叮); ©while(chl=In') ④ ④{st0=ch; ++; scanf(“%c”,&ch):I吓1个字符 ⑥ } ⑥ ⑧ t+: ⑦} ⑧st[0=10
例1:for 循环实现 ①char st[20]; ②for (i=0;i<20;i++) ③ scanf(“%c”,&st[i]); //空格作为字符读入 ④for (i=0;i<20;i++) ⑤ printf(“%c”,st[i]); 10.3 字符数组的输入输出 1、逐个字符输入输出 例2:while 循环实现: ①int i=0; char ch, st[20]; ②scanf(“%c”, &ch); //第1个字符 ③while(ch != ‘\n’) ④ { st[i] = ch; ⑤ scanf(“%c”, &ch);//下1个字符 ⑥ i++; ⑦ } ⑧st[i] = ‘\0’; ① i=0; ② while (st[i]!=‘\0’) ③ { printf(“%c”,st[i]); ④ i++; ⑤ } 区别: 例1:必须输入20个字符 例2:回车结束
2、整个字符数组输入 多组输入: char s[10]; ① gets函数 while(get(s)!=NULL) 或while(gets)/多组输入 格式:get(字特数组名) ∥应包含的.h文件stdio.h 功能:以回本箱束的字符串放入字苻数组中,并自动加八0’ 1 char st[80];gets (st); 当输入:Iolovechina!k(o表示空格,表示回车)时, st中的字符串将是:"I love china!" ②scanfi函数 格式:scanf(“%s”,字符数组名)∥应包含的.h文件stdio.h 功能:以空格或圆本结束的字待串放入字苻数组中,并自动加八0' 例2:char st1401,st2[40,st340; scanf ("%s%s%s",st1,st2,st3); 输入:口口I▣love口china!e st1:"I",st2:"love",st3:"china!" 例3:使用%s格式控制符限制输入的字符个数。 char st[20]; scanf("%9s",st);/最多可读入9个非空格字符到st中
2 、整个字符数组输入 格式:gets(字符数组名) //应包含的.h文件stdio.h 功能:以回车结束的字符串放入字符数组中,并自动加'\0’ 例1:char st[80]; gets (st); 当输入:I□love□china!↙(□表示空格,↙表示回车)时, st中的字符串将是:"I love china!" ① gets函数 ② scanf函数 格式:scanf(“%s” , 字符数组名) //应包含的.h文件 stdio.h 功能:以空格或回车结束的字符串放入字符数组中,并自动加'\0’ 多组输入: char s[10]; while (get(s)!=NULL) 或 while (get(s)) //多组输入 例2:char st1[40], st2[40], st3[40]; scanf ("%s%s%s", st1, st2, st3); 输入:□□I□love□china!↙ st1:"I",st2:"love",st3:"china!” 例3:使用%ns格式控制符 限制输入的字符个数。 char st[20]; scanf ("%9s", st); //最多可读入9个非空格字符到st中
gets函数与scanf函数的区别 gets scanf ①输入的字符串中可包含 ①输入的字符串中不能包含空 空格字符 格字符,遇到空格自动结束。 ②只能输入一个字符串 ②可连续输入多个字符串(使 用%s%s.) ③不能限定字符串的长度 ③能限定字符串的长度(使用 %ns ④遇到回车符结束 ④遇到空格符或回车符结束
gets函数与scanf函数的区别 gets scanf ① 输入的字符串中可包含 空格字符 ① 输入的字符串中不能包含空 格字符,遇到空格自动结束。 ② 只能输入一个字符串 ② 可连续输入多个字符串(使 用%s%s.) ③ 不能限定字符串的长度 ③ 能限定字符串的长度(使用 %ns) ④ 遇到回车符结束 ④ 遇到空格符或回车符结束