第10章 字符串.ppt
《第10章 字符串.ppt》由会员分享,可在线阅读,更多相关《第10章 字符串.ppt(84页珍藏版)》请在一课资料网上搜索。
1、内容提要,字符串常量 字符串处理函数 字符数组和字符指针 向函数传递字符串 从函数返回一个字符串指针,第10章 字符串,10.1字符串常量,10.2字符串的存储,C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理 字符数组 每个元素都是字符类型的数组 char str80;,数组的最后一个元素必须是0,字符数组的初始化,用字符型数据对数组进行初始化 char str6 = C,h,i,n,a,0; 用字符串常量直接对数组初始化 char str6 = China; char str6 = China;,字符数组,字符数组是每个元素存放一个字符型数据的数组。 字符数组的定
2、义形式和元素的引用方法与一般数组相同。,说明: C语言中没有专门的字符串变量,因此利用字符型数组来处理字符串。,3. 字符串常量是用双引号包围的字符序列。 如:china,作为字符串的结束标志的0 可以不显式写出。,2. C语言中约定用0作为字符串的结束标志,它占内存空间,但不计入串的实际长度。,两种用法:,(1)作为字符(单个字符操作),(2)作为字符串(整体操作),字符数组的初始化,【注意】如果初值个数小于数组长度,则多余的数组元素自动为空字符(0),char rat5=T,h,e,;,1、用字符型数据对字符数组初始化,2、用字符串常量对字符数组初始化 char panic6=HELLO;
3、,注意: 数组中的字符除了H,E,L,O,)之外,系统自动加入结束标志0。 为了用一个字符数组来存储长度为N的字符串,要求字符数组的大小至少为N+1.,系统自动加入,初始化时也可省略花括号。 char panic=HELLO;,系统自动加入,下面的初始化是错误的: char neg5=double arrow;,【例 】比较以下字符数组长度是否相同: char a =ABCD; char b = ABCD; char c =A,B,C,D;,数组a、b系统长度为5,数组c系统长度为4,字符常量与字符串常量的区别,字符常量 字符串常量 单引号 双引号 1个字符 多个字符 字符变量 字符数组、字符
4、指针 一个字节 字符串中字节数+1(0结束标志),引用形式: 存放内容: 赋值对象: 占用空间:,例如: a a 不同 1个字节 2个字节,回顾,例1:作为普通数组处理,main() char ary110=P,L,O,T,ary210; char ch; int i,j; for(i=0;i4;i+) printf(%c,ary1i); printf(请输入一行字符n); for(i=0;i10;i+) scanf(%c, ,例2:作为字符串处理,main() char ary110=PLOT,ary210; printf(%s,ary1); printf(请输入一行字符n); scanf(
5、%s,ary2); printf(%s,ary2); ,注意:,rintf、scanf处理字符串数组时可使用 数组名作为函数参数。,对于一个二维数组,C编译程序将其视为一个一维数组,这个一维数组中每个元素又是一个一维数组。这一概念对字符型数组仍适用。,3、二维字符数组的初始化,char ch34=aa,bbb,c ;,第一维的长度代表要存储的字符串的个数,可以省略。 第二维的长度不能省略,且应按最长的字符串长度设定,10.3字符指针,C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理,字符串是一串用双引号引起来的字符,字符数组就是每个元素都是字符型的数组,字符指针就是指
6、向字符类型数据的指针,Hello China,pStr,数组最后一个元素必须是0才表示字符串,10.3字符指针,定义和初始化方法不同,str = Hello China;,Hello China,pStr,char str12 = Hello China;,char *pStr; pStr = Hello China;,str,Why?,数组名str是地址常量,字符指针pStr是变量,10.3字符指针,定义和初始化方法不同,char *pStr = Hello China;,Hello China,pStr,char str12 = Hello China;,char *pStr; pStr
7、= Hello China;,str,pStr = ,字符串(String)与字符数组、字符指针,字符串 一串以0结尾的字符在C语言中被看作字符串 用双引号括起的一串字符是字符串常量,C语言自动为其添加0终结符 C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理 字符数组 每个元素都是字符类型的数组 char string100; 字符指针 指向字符类型的指针 char* p; 数组和指针可以等同看待,上面三者本质上是一回事,按字符逐个输入/输出,for (i=0; stri!=0; i+) putchar(stri); putchar(n);,char str10;,
8、10.4字符串的访问和输入/输出,按字符串整体输入/输出,scanf(%s,str); printf(%s,str);,char str10;,10.4字符串的访问和输入/输出,gets(str); puts(str);,scanf(%s,str); printf(%s,str);,char str10;,10.4字符串的访问和输入/输出,gets(str); puts(str);,按字符串整体输入/输出,字符数组的输入输出,1、按%c格式符一个字符一个字符地单独输入输出,例: main() int i; char str10; for(i=1;i10;i+) scanf(%c, ,(1)输入
9、多个数据时,格式控制串中没有非格式字符,则输入时数据间的分隔符可用空格、TAB键、回车键。,(2)输入字符数据时,若格式控制符中无非格式符,则认为所有输入的字符均为有效字符。 scanf(%c%c%c, 输入:A,B,C 输出:a=A,b=,c=B,2、按%s格式符将字符串作为一个整体输入输出, 用scanf函数加%s实现字符串输入,注意: (1) 输入的字符串中不能有空格、回车或跳格符(Tab),因为系统遇到这些分隔符时,会认为输入结束。 上例中若输入:hello world 则实际存入str的只有hello “ (2) 要保证字符数组的长度足够大。,例如: char str10; scan
10、f(%s,str);, 用printf函数加%s实现字符串输出 printf(%s,str);,(3) 数组名前不用加 printf(%s,a);,说明:%s的作用是输出一个字符串,直到遇到0为止。,3、用gets 或 puts 输入输出一个字符串,gets( )函数专门用于输入字符串 一般形式是: gets(字符数组名);,其中:函数参数只能使用数组名而不能是字符串常量,scanf()不能读入带空格的字符串,gets()可以,与scanf函数的不同是: gets()函数将用户键入的换行符之前的所有字符(包括t和 )存入字符数组,然后加上0,但换行符被丢掉 与scanf函数相同的是: gets
11、()函数也不检查用户输入字符串长度是否超过了字符数组的容纳能力,因此编程者要确保数组足够大。,gets( )函数专门用于输入字符串,#include /* 必须加上*/ #define LATH 80 main() char nameLATH; printf(你好,请输入姓名:n); gets(name); printf(真是个好名字:%sn,name); ,例 :,#include #define LEN 80 main() char name1LEN; printf(请输入一个姓名:n); scanf(%s,name1); printf(读入的名字是%sn,name1); ,输入:,于 航
12、,输出:,于,gets(),字符串输入函数gets()也没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给黑客攻击以可乘之机,对输入字符串长度有限制的函数调用 fgets(buf, sizeof (buf), stdin);P284 stdin:输入缓冲区,scanf、 gets被公认为最易遭到黑客攻击的函数之一,其中:函数参数可以是字符串常量,也可以 是字符数组名。,uts()函数专门用于输出字符串,一般形式是: puts(字符串);,与printf()的不同: puts()函数打印字符串的全部内容,直至遇到0为止,然后自动多打印一个n,起到换行的作用。而printf函数无此功能。,#
13、include #define PREDEF 这是预定义字符串 main() char str=这是初始化字符串; puts(这是直接使用字符串常量); puts(PREDEF); puts(str); ,例 :,逐个输入输出,for (i=0; i=10; i+) si=getchar(); putchar(si); putchar(n);,一次性输入输出,scanf(%s,s); printf(%s,s);,char s10;,字符数组的输入输出,gets(s); puts(s);,建议: 当多种类型的混合输入输出 时,选用 scanf 和 printf; 当大量文字信息输入输出时,使 用
14、 gets 和 puts。,10.4字符串的访问和输入/输出,【例10.1】从键盘输入一个人名,把它显示在屏幕上,Why?,10.4字符串的访问和输入/输出,【例10.1】从键盘输入一个人名,把它显示在屏幕上,10.4字符串的访问和输入/输出,【例10.2】使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上,10.4字符串的访问和输入/输出,【例10.2】使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上,10.4字符串的访问和输入/输出,【例10.2】使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上 P284,10.4字符串
15、的访问和输入/输出,【例10.3】从键盘输入一个带有空格的人名,然后在显示人名的前面显示Hello, I said to,10.4字符串的访问和输入/输出,【例10.3】从键盘输入一个带有空格的人名,然后在显示人名的前面显示Hello, I said to,10.5字符串处理函数,#include ,strcpy(目的字符串,源字符串);,string copy,strlen(字符串);,string length,strcat(目的字符串,源字符串);,string combination,strcmp(字符串1,字符串2);,string comparison,计算字符串长度,#inclu
16、de ,strlen(字符串);,string length,char str10 = China; printf(%d, strlen(str); 打印结果是 5,6,还是10?,计算字符串长度,#include ,strlen(字符串);,string length,len = strlen(str); for (i=0; ilen; i+) putchar(stri); putchar(n);,字符串复制,#include ,strcpy(目的字符串,源字符串);,string copy,字符串能否用=整体复制? str2 = str1;,strcpy(str2, str1);,字符串复
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 字符串 10
