
第10章字符串10.1字符串常量10.2(重点)如何表示字符串变量10.3字梦串的输入输出10.4字符指针与字符串(重点)10.5字符串处理函数10.6,程序举例
10.1 字符串常量 10.2 如何表示字符串变量(重点) 10.3 字符串的输入输出 10.4 字符指针与字符串 10.5 字符串处理函数(重点) 10.6 程序举例 第10章 字符串

10.1字符串常量一P221字符串常量:用双引号括起来的部分----是字符串常量。例如:"abc""Hello!""a+b"字符串常量"abc"在内存中占4个字节,而不是3个字节。97980990ba字符串常量"abcln"包含4个字符,占5个字节。b10nca注意1:字符串用双引号括起来如:"a"一是字符串常量、‘a'是字符常量注意2:C语言规定"10'为“字符串结束标志”,系统自动在后面加一个"0注意3:在程序中一般是通过检测0的位置来判定字符串是否结束注意4:字符串常量-被处理成一个无名的字符型一维数组
字符串常量:用双引号括起来的部分-是字符串常量。 例如: "abc" "Hello! " "a+b" ➢字符串常量"abc"在内存中占4个字节,而不是3个字节。 ◆ 字符串常量"abc\n"包含4个字符,占5个字节。 注意1:字符串用双引号括起来。 如:"a"—是字符串常量、'a'是字符常量 注意2:C语言规定'\0'为“字符串结束标志”,系统自动在后面加一个'\0' 。 注意3:在程序中一般是通过检测'\0'的位置来判定字符串是否结束。 注意4:字符串常量-被处理成一个无名的字符型一维数组。 10.1 字符串常量—P221

10.2字符数组的定义与引用一--P223用来存放字符数据的数组。>字符数组:>定义字符数组:例1:ch[5]={a',"b,c";//定义5个元素的字符数组chcharch[0]ch[1]ch[2]ch[3]ch[4]1010baC例2:char st[2][20]={"Zhang","Wang Lei"}; /用二维字符数组存放多个姓名236701458919C10zh1010101010ang-WL101010ange
10.2 字符数组的定义与引用 –-P223 ➢字符数组:用来存放字符数据的数组。 ➢定义字符数组: 例1:char ch[5]={'a' , 'b' , 'c'}; //定义5个元素的字符数组ch 例2: ch[0] ch[1] ch[2] ch[3] ch[4] a b c \0 \0 char st[2][20]={"Zhang", "Wang Lei"}; //用二维字符数组存放多个姓名 0 1 2 3 4 5 6 7 8 9 . 19 0 Z h a n g \0 \0 \0 \0 \0 . \0 1 W a n g L e i \0 \0 . \0

字符数组的初始化:1、定义时初始化例1:chara[3]={*",%',@}, b[3];/ /对/错误---数组名b是地址常量,不能修改b=a;1//正确,引用数组元素。b[0]=a[0];for (i=0;i<=2;i++)b[i]=a[i];//正确,引用数组元素。2、字符数组定义后,可以给元素赋值,但不能对整个数组赋值。例2:char ch[5];Ⅱ正确,对数组元素赋值ch[2]='a'; ch[3]='b';1ch='C',"h,"i,‘n','a";//错误一数组名ch是地址常量2
1、定义时初始化 例1:char a[3]={'*' , '%' , '@'},b[3];//对 ① b=a; //错误-数组名b 是地址常量,不能修改 ② b[0]=a[0]; //正确,引用数组元素。 ③ for (i=0;i<=2;i++) b[i]=a[i]; //正确,引用数组元素。 2、字符数组定义后,可以给元素赋值,但不能对整个数组赋值。 例2:char ch[5]; ① ch[2]= 'a'; ch[3]='b'; // 正确,对数组元素赋值 ② ch={'C' , 'h' , 'i' , 'n' , 'a'}; // 错误—数组名ch是地址常量 字符数组的初始化:

讨论1:字符串与字数组的关系1、例1: char st={"China"};chi10na②char st="China";③char st=tc',h',i,'n',a',lo';结论1:①②③等价一-含义:定义字符数组st,st长度是6结果:将字符串常量"China”赋给数组st。结论2:3字符串常量可以给字符数组初始化。(如①②)2、区别:系统自动在字符串末尾加一个10表示结束:而字符数组并不要求最后一个字符一定是10',甚至可以没有"10'。chan例2:char st={'C',"h',"i',‘n','a'}lI对,st长度是5。st是字符数组但不是字符串,[因为该st数组未尾无10好习惯:在字符数组有效字符末尾人为地加'10',使数组表示字符串。ih10cna例3:charst={c'h,in,a,o'}I/对,st是字符数组也是字符串,st长度是6结论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长度是5。st是字符数组但不是字符串,因为该st数组末尾无'\0' 好习惯:在字符数组有效字符末尾人为地加' \0' ,使数组表示字符串。 例3:char st[]={'C' , 'h' , 'i' , 'n' , 'a' , '\0'}; //对,st是字符数组也是字符串,st长度是6 C h i n a \0 结论3:字符串可以用字符数组来表示, 但是字符数组不一定是字符串。(字符数组末尾可以无'\0')

课堂练习:判断charstl="china";与下列等价?10;i.n'.'a.D char stll=c②char stl="china":③char st l='c',"h','i','n','a'思考:判断charst10l="china";与下列等价?Dcharstl10]=ca:n:注意:在用字符数组来存放某个字符串常量时,如果要指定字符数组的大小,那么其大小至少要比字符串的长度大1(多定义一个字节用于存放10)
课堂练习:判断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循环实现@ int i;char s[10];for(i=0;i<10;i++)②1abc12车可以作为字符读入scanf("%c"&s[]);ABCDEF③④for(i=0;i<10;i++)abc12printf("%c",s[i]);?ABCi=0;例2:while循环实现:1@inti=0;char ch,s[10]while (s[i]!='l0')②scanf("%c",&ch);1/第1个字符printf("%c",s[])3while(ch!='n')31i++;ab123q(s=ch;人?scanf("%c",&ch);l/下1个字符i+t;ab123区别:例1:必须输入10个字符s[]="10;8例2:回车结束
例1:for 循环实现 ① int i;char s[10]; ② for (i=0;i<10;i++) ③ scanf("%c" ,&s[i]); //空格、回车可以作为字符读入 ④ for (i=0;i<10;i++) ⑤ printf("%c",s[i]); 10.3 字符数组的输入输出 1、逐个字符输入输出 例2:while 循环实现: ① int i=0; char ch, s[10]; ② scanf("%c", &ch); //第1个字符 ③ while(ch!= '\n') ④ { s[i] = ch; ⑤ scanf("%c", &ch);//下1个字符 ⑥ i++; ⑦ } ⑧ s[i] ='\0'; ① i=0; ② while (s[i]!='\0') ③ { printf("%c",s[i]); ④ i++; ⑤ } 区别: 例1:必须输入10个字符 例2:回车结束

注意:多组输入一举例2、整个字符数组输入char s[100];while (get(s)!-NULL)①gets函数或while(get(s))1/多组输入格式:gets字符数组名)//应包含的.h文件stdio.h功能:以回车束的字荐串放入字待数组中,并自动加0例1:char st[80];gets (st);当输入:Ilove口china!(口表示空格,表示回车)时st中的字符串将是:"lovechina!scanf函数2格式:scanf("%s",字符数组名)1应包含的.h文件stdio.h功能:以空格或回车结来的宇符串放入字待数组中,并自动加0例2:chars1[40],s2[40],s3[40];scanf ("%s%s%s", sl, s2, s3);输入:口Ilovechina!sl:"l", s2: "love", s3: "china!"例3:使用%ns格式控制符限制输入的字符个数。char s[20];scanf"%9s",s);//最多可读入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[100]; while (get(s)!=NULL) 或 while (get(s)) //多组输入 例2:char s1[40], s2[40], s3[40]; scanf ("%s%s%s", s1, s2, s3); 输入:□□I□love□china!↙ s1:"I",s2:"love",s3:"china!” 例3:使用%ns格式控制符 限制输入的字符个数。 char s[20]; scanf ("%9s", s); //最多可读入9个非空格字符到st中

gets函数与scanf函数的区别scanfgets输入的字符串中不能包含空输入的字符串中可包含空格字符格字符,遇到空格自动结束2②只能输入一个字符串可连续输入多个字符串(使用%s%s...)③不能限定字符串的长度③能限定字符串的长度(使用%ns1遇到回车符结束遇到空格符或回车符结束接受回车③不接受回车
gets函数与scanf函数的区别 gets scanf ① 输入的字符串中可包含 空格字符 ① 输入的字符串中不能包含空 格字符,遇到空格自动结束。 ② 只能输入一个字符串 ② 可连续输入多个字符串(使 用%s%s.) ③ 不能限定字符串的长度 ③ 能限定字符串的长度(使用 %ns) ④ 遇到回车符结束 ④ 遇到空格符或回车符结束 ⑤接受回车 ⑤不接受回车

3、整个字符数组输出①puts函数/应包含的.h文件stdio.h格式:puts(字符串地址或字符数组名)功能:向显示器输出字符串(输出完自动换行说明:如果是字待数组则必须以0结束例1: char str[]= "Ilove china!";输出结果:Ilovechina!puts (str);IloveZibo!puts ("Ilove Zibo!");printf函数2格式:printf(“%s",字符串地址或字符数组名)//应包含的.h文件stdio.h功能:依次输出字荐串中的每个字符直到退到字荐八00不会被输出例2:charnamel="JohnSmith"输出结果:1:John Smith①printf("1:%sln",name);2:Smith②printf("2:%sln",&name5D;3:abc③printf("3:%sn","abc");
格式:puts(字符串地址或字符数组名) //应包含的.h文件 stdio.h 功能:向显示器输出字符串(输出完自动换行) 说明:如果是字符数组,则必须以'\0'结束 ① puts函数 例1:char str[ ] = "I love china! "; puts (str); puts ("I love Zibo! "); 输出结果: I love china! I love Zibo! ② printf函数 格式:printf(“%s” , 字符串地址或字符数组名) //应包含的.h文件stdio.h 功能:依次输出字符串中的每个字符直到遇到字符'\0 ' ('\0'不会被输出) 例2:char name[ ] = "John Smith"; ①printf ("1: %s\n", name); ②printf ("2: %s\n", &name[5]); ③printf ("3: %s\n", "abc"); 输出结果: 1: John Smith 2: Smith 3: abc 3、整个字符数组输出