程序设计基础 第10章字符串 1/20
程序设计基础 第10章 字符串 1/20
本章内容 ■10.1字符串常量 ■10.2如何表示字符串变量(重点) ■10.3字符串的输入输出 ■10.4字符串处理函数(重点) ■10.5字符指针与字符数组的区别(难点) ■10.6程序举例 2/20
◼10.1 字符串常量 ◼10.2 如何表示字符串变量(重点) ◼10.3 字符串的输入输出 ◼10.4 字符串处理函数(重点) ◼10.5 字符指针与字符数组的区别(难点) ◼10.6 程序举例 本章内容 2/20
字符数组、字符串常量和字苻串结束标志 10.1字符串常量 str[o]str[1]str[2]str[3]str[4] ■字符数组:用来存放字符数据的数组。 c h ◆char str[5l; n a ◆str0=C';str=h';str2=i;str3]=n';str4=a';/先定义,再赋初值 ◆char str10={C',h',i,n',‘a';/定义时初始化 ◆char str=C,h’,i,n',‘a;/默认数组长度为5 ■字符串常量:用双引号括起来的字符序列。 ◆例如:字符串常量“China”在内存中占6个字节,而不是5个字节。 str[o]str[1]str[2]str[3]str[4]str[5] n a 10 ◆C语言规定字符0'为“字符串结束标志”。系统会自动在后面加一个0'。 ◆在程序中往往依靠检测0'的位置来判定字符串是否结束。 ■用字符串常量来初始化字符数组。例如 ◆char str0=China"; ◆char str=“China”;∥默认数组长度是6 ■在语句中不能用字符串给字符数组整体赋值。 ◆char str[12]; ◆str=“China”;l错误,数组名str是常量不可再赋值。 example6_4_string 3/20
◼ 字符数组:用来存放字符数据的数组。 example6_4_string ◆ char str[5]; ◆ str[0]=‘C’; str[1]=‘h ’; str[2] = ‘i’; str[3] = ‘n’; str[4] = ‘a’; //先定义,再赋初值 ◆ char str[10]={‘C’, ‘h’, ‘i’, ‘n’, ‘a’}; //定义时初始化 ◆ char str[]={‘C’, ‘h ’, ‘i’, ‘n’, ‘a’ }; //默认数组长度为5 字符数组、字符串常量和字符串结束标志 ◼ 字符串常量:用双引号括起来的字符序列。 ◆例如: 字符串常量“China”在内存中占6个字节,而不是5个字节。 ◆ C语言规定字符‘\0’为“字符串结束标志”。系统会自动在后面加一个‘\0’ 。 ◆ 在程序中往往依靠检测‘\0’的位置来判定字符串是否结束。 str[0] str[1] str[2] str[3] str[4] str[5] C h i n a \0 ◼ 用字符串常量来初始化字符数组。例如 ◆ char str[]={“China”}; ◆ char str[]=“China”; //默认数组长度是6 str[0] str[1] str[2] str[3] str[4] C h i n a 10.1 字符串常量 ◼在语句中不能用字符串给字符数组整体赋值。 ◆ char str[12]; ◆ str=“China”; //错误,数组名str是常量不可再赋值。 3/20
讨论1:字符数组最后一个号是否必须为0 ■char str={“China"; ■char str=“China'"; h n a 0 ■char str0=℃',h',i',n',a',0; ■char str[7]☑={C',h',i',n',‘a: h n 0 10 字符数组并不要求它的最后一个字符为10',甚至可以不包含0' 好习惯:在字符数组有效字符的后面人为地加0 char str[6]=℃',h',i,n',a',0'y 讨论2:如何用字符数组存放多个姓名 ■二维字符数组char str[2][20]={Nang Fei'”,“Xie Tingfeng"; 0 3 5 6 8 9 10 11 12 ■■■ 19 0 W a g 10 10 10 10 10 10 e n 9 10 10 10 4/20
讨论1:字符数组最后一个符号是否必须为‘\0’ ◼char str[]={“China”}; ◼char str[]=“China”; ◼char str[]={‘C’, ‘h ’, ‘i’, ‘n’, ‘a ’, ‘\0’}; C h i n a \0 C h i n a \0 \0 ◼ char str[7]={‘C’, ‘h’, ‘i’, ‘n’, ‘a’}; 字符数组并不要求它的最后一个字符为‘\0’ ,甚至可以不包含‘\0’ 好习惯:在字符数组有效字符的后面人为地加‘\0’ char str[6]={‘C’, ‘h ’, ‘i’, ‘n’, ‘a ’, ‘\0’} ◼二维字符数组 char str[2][20]={“Wang Fei”, “Xie Tingfeng”}; 0 1 2 3 4 5 6 7 8 9 10 11 12 . 19 0 W a n g F e i \0 \0 \0 \0 \0 \0 . \0 1 X i e T i n g f e n g \0 \0 . \0 讨论2:如何用字符数组存放多个姓名 4/20
字符数组的输入输出 ■输入并输出自已的姓名 数组元素地址 ■逐个字符输入输出(for循环实现): char str[20]; for(=0;K20;it+)scanf(“y%c”,&str[)i for(=0;ik20;it+)printf(o%c”,str[叮)房 空格作为字符读入 ■逐个字符输入输出(while循环实现) char ch,str[20]; i=0; i=0;scanf(%c”,&ch)月 while(str[0)l=o) while(ch !'In') printf("%c",str[i]); str[i]=ch; ++; scanf((%c”,&ch)i } ++; printf(An'); str[i]=10'; example6_4_1 5/20
char str[20]; for(i=0;i<20;i++) scanf(“%c”,&str[i]); for(i=0;i<20;i++) printf(“%c”,str[i]); 字符数组的输入输出 ◼输入并输出自己的姓名 ◼逐个字符输入输出(for循环实现): ◼逐个字符输入输出(while循环实现) example6_4_1 数组元素地址 空格作为字符读入 char ch, str[20]; i=0; scanf(“%c”, &ch); while(ch != ‘\n’) { str[i] = ch; scanf(“%c”, &ch); i++; } str[i] = ‘\0’; i=0; while(str[i])!=‘\0’) { printf(“%c”,str[i]); i++; } printf(‘\n’); 5/20