c语言-字符串PPT课件_第1页
c语言-字符串PPT课件_第2页
c语言-字符串PPT课件_第3页
c语言-字符串PPT课件_第4页
c语言-字符串PPT课件_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,1,Chap10字符串,字符串常量字符串处理函数字符数组和字符指针向函数传递字符串从函数返回一个字符串指针,.,2,字符串常量,.,3,C语言并没有为字符串提供任何专门的表示法,使用数组或者字符指针这两种方式来表示、处理字符串。字符数组:每个元素都是字符类型的数组charstr80;,字符串的存储,数组的最后一个元素必须是0,0,.,4,用字符型数据对数组进行初始化charstr6=C,h,i,n,a,0;用字符串常量直接对数组初始化charstr6=China;charstr6=China;,字符数组的初始化,.,5,字符指针,字符串是一串用双引号引起来的字符,字符指针就是指向字符类型数据的指针,HelloChina,pStr,数组最后一个元素必须是0才表示字符串,.,6,str=HelloChina;,HelloChina,pStr,charstr12=HelloChina;,char*pStr;pStr=HelloChina;,str,Why?,数组名str是常量指针,字符指针pStr是变量,.,7,这两种字符串的表示方法:定义和初始化方法不同,char*pStr=HelloChina;,HelloChina,pStr,charstr12=HelloChina;,char*pStr;pStr=HelloChina;,str,.,8,字符数组与字符指针的重要区别,charsa=Thisisastring;char*sp=Thisisastring;,sa,sp,如果要改变数组sa所代表的字符串,只能改变数组元素的内容如果要改变指针sp所代表的字符串,通常直接改变指针的值,让它指向新的字符串,.,9,charsa=Thisisastring;char*sp=Thisisastring;sp=“Hello”;合法sa=“Hello”;非法数组名是常量,不能对它赋值,示例,.,10,定义字符指针后,如果没有对它赋值,指针的值不确定char*s;scanf(“%s”,s);定义指针时,先将它的初值置为空char*s=NULL;char*s,str20;s=str;scanf(“%s”,s);,字符指针的使用先赋值,后引用,不要引用未初始化的指针!,.,11,函数原型声明在stdio.h或string.h中给出字符串的输入和输出输入字符串:scanf()或gets()输出字符串:printf()或puts()stdio.h,常用的字符串处理函数,.,12,charstr80;i=0;while(stri=getchar()!=n)i+;stri=0;,字符串的输入输出:第一种方式:循环接收输入的字符,.,13,for(i=0;stri!=0;i+)putchar(stri);putchar(n);,按字符逐个输入/输出,charstr10;,字符串的输入输出:第一种方式:循环输出字符,.,14,(1)scanf(%s,str)控制说明符:%s输入参数:字符数组名,不加地址符遇回车或空格输入结束,并自动将输入的一串字符和0送入数组中(2)gets(str)输入参数:字符数组名,不加地址符遇回车输入结束,自动将输入的一串字符和0送入数组中,字符串的输入:第二种方式:接收字符串整体,.,15,按字符串整体输入/输出,scanf(%s,str);printf(%sstr);,charstr10;,gets(str);puts(str);,字符串的访问和输入/输出,.,16,scanf(%s,str);printf(%s,str);,charstr10;,字符串的访问和输入/输出,gets(str);puts(str);,按字符串整体输入/输出,.,17,(1)printf(%s,str)printf(%s,hello);控制说明符:%s输出参数可以是字符数组名、字符指针、字符串常量,输出遇0结束(2)puts(str)puts(hello);输出参数可以是字符数组名、字符指针、字符串常量,输出遇0自动转换为换行,字符串的输出第二种方式:输出字符串整体,.,18,charsa=array;char*sp=point;printf(%s,sa);printf(%s,sp);,arraypoint,printf(%s,sa+2);printf(%s,sp+3);,raynt,字符串输出举例:,.,19,#includeintmain()charstr80;scanf(%s,str);printf(%s,str);printf(%s,Hello);return0;,字符串输入输出函数示例(1),输入:Programming输出:ProgrammingHello,输入:Programmingisfun!输出:ProgrammingHello,.,20,字符串输入输出函数示例(2),输入:Programming输出:ProgrammingHello,输入:Programmingisfun!输出:Programmingisfun!Hello,#includeintmain()charstr80;gets(str);puts(str);puts(Hello);return0;,.,21,从键盘输入一个人名,把它显示在屏幕上,Why?,.,22,从键盘输入一个人名,把它显示在屏幕上,.,23,使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上,.,24,使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上,.,25,使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上,.,26,从键盘输入一个带有空格的人名,然后在显示人名的前面显示Hello,Isaidto,.,27,从键盘输入一个带有空格的人名,然后在显示人名的前面显示Hello,Isaidto,.,28,#include,字符串处理函数,strcpy(目的字符串,源字符串);,stringcopy,strlen(字符串);,stringlength,strcat(目的字符串,源字符串);,stringcombination,strcmp(字符串1,字符串2);,stringcomparison,.,29,计算字符串长度,strlen(字符串);,stringlength,charstr10=China;printf(%d,strlen(str);打印结果是5,6,还是10?,#include,.,30,使用的形式:strlen(str)作用:计算字符串的有效长度,不包括0staticcharstr20=“Howareyou?”strlen(“hello”)的值是:5strlen(str)的值是:12,字符串长度函数strlen,.,31,计算字符串长度,stringlength,len=strlen(str);for(i=0;i,=比较大小?if(str2=str1),if(strcmp(str2,str1)=0),strcmp(字符串1,字符串2);,.,37,strcmp(str1,str2)比较两个字符串str1和str2的大小。从两个字符串的首字符开始,依次比较对应的字符,直到出现不同的字符或遇0为止规则:按字典序(ASCII码序)如果str1和str2相等,返回0;如果str1大于str2,返回一个正整数;如果str1小于str2,返回一个负整数;,字符串比较函数strcmp,.,38,字符串比较,stringcomparison,字符串是如何比较大小的?,comparecomputer,comparecomputerstrcmp(str1,str2)0strcmp(str1,“hello”)str2str1“hello”str1=str2,比较字符串首元素的地址,比较字符串的内容,.,42,按奥运会参赛国国名在字典中的顺序对其入场次序进行排序,.,43,按奥运会参赛国国名在字典中的顺序对其入场次序进行排序,.,44,字符串处理函数,.,45,向函数传递字符串时,既可使用字符数组作函数参数,也可使用字符指针作函数参数传地址调用,向函数传递字符串,.,46,unsignedintMyStrlen(charstr)inti;unsignedintlen=0;for(i=0;stri!=0;i+)len+;return(len);,计算实际字符个数,方法1:用字符数组实现,统计实际字符个数(不含0),.,47,计算实际字符个数,unsignedintMyStrlen(constchar*pStr)unsignedintlen=0;for(;*pStr!=0;pStr+)len+;return(len);,方法2:用字符指针实现,统计实际字符个数(不含0),.,48,voidMyStrcpy(chardstStr,charsrcStr)inti=0;while(srcStri!=0)dstStri=srcStri;i+;dstStri=0;,字符串复制用字符数组编程,srcStri,dstStri,H,i=0,e,i=1,l,i=2,l,i=3,o,i=4,i=5,C,i=6,h,i=7,i,i=8,n,i=9,a,i=10,0,srcStri=0,.,49,voidMyStrcpy(char*dstStr,char*srcStr)while(*srcStr!=0)*dstStr=*srcStr;srcStr+;dstStr+;*dstStr=0;,字符串复制用字符指针编程,*srcStr,*dstStr,H,e,l,l,o,C,h,i,n,a,0,*srcStr=0,srcStr+,dstStr+,.,50,从函数返回字符指针:编程实现strcat()的功能,.,51,从函数返回字符指针:编程实现strcat()的功能,.,52,从函数返回字符指针:编程实现strcat()的功能,.,53,字符串加密问题,#defineMAXLINE100voidencrypt(char*s);intmain(void)charlineMAXLINE;printf(Inputthestring:);gets(line);encrypt(line);printf(“Afterbeingencrypted:%sn,line);return0;,Inputthestring:hellohangzhouAfterbeingencrypted:ifmmp!ibohaipv,.,54,voidencrypt(chars)inti;for(i=0;si!=0;i+)if(si=z)si=a;elsesi=si+1;,加密函数的两种实现,voidencrypt(char*s)for(;*s!=0;s+)if(*s=z)*s=a;else*s=*s+1;,.,55,intmain()inti;intx,min;scanf(%d,求最小字符串,#include#includeintmain()inti;charsx80,smin80;scanf(%s,sx);strcpy(smin,sx);for(i=1;i5;i+)scanf(%s,sx);if(strcmp(sx,smin)0)strcpy(smin,sx);printf(minis%sn,smin);return0;,28-1990minis1,toolkeyaboutzooseaminisabout,.,56,先输入一个正整数n,再输入任意n个整数,计算并输出这n个整数的和。要求使用动态内存分配方法为这n个整数分配空间。,任意个整数求和问题*?,.,57,变量在使用前必须被定义且安排好存储空间全局变量、静态局部变量的存储分配是在编译时确定的,在程序开始执行前完成。自动变量,变量的大小是编译时静态确定的,在执行进入变量定义所在的复合语句时为它们分配存储,。然而很多情况,运行中的很多存储要求在写程序时无法确定,指针的应用:用指针实现内存动态分配,.,58,存储大小不在编译时就确定下来,而是由用户在程序中通过动态分配确定。使用动态内存管理的方式能有效地使用内存使用时申请用完就释放同一段动态内存可以有不同的用途,动态存储管理,.,59,(1)了解需要多少内存空间(2)利用C语言提供的动态分配函数来明确所需要的存储空间。#include(3)使指针指向获得的内存空间,以便使用指针在该空间内实施运算或操作。(4)当使用内存完毕,一定要释放动态内存。,动态内存分配的步骤,.,60,void*malloc(unsignedsize)在内存的动态存储区中分配一连续空间,其长度为size若申请成功,则返回一个指向所分配内存空间的起始地址的指针若申请内存空间不成功,则返回NULL(值为0)返回值类型:(void*)通用指针的一个重要用途将malloc的返回值转换到特定指针类型,赋给一个指针,动态存储分配函数malloc,.,61,/*动态分配n个整数类型大小的空间*/if(p=(int*)malloc(n*sizeof(int)=NULL)printf(“Notabletoallocatememory.n”);exit(1);调用malloc时,用sizeof计算存储块大小每次动态分配都要检查是否成功,考虑例外情况处理虽然存储块是动态分配的,但它的大小在分配后也是确定的,不要越界使用。,malloc()使用示例,.,62,void*calloc(unsignedn,unsignedsize)在内存的动态存储区中分配n个连续空间,每一存储空间的长度为size,并且分配后还把存储块里全部初始化为0若申请成功,则返回一个指向被分配内存空间的起始地址的指针若申请内存空间不成功,则返回NULLmal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论