欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    字符串及其应用.ppt

    • 资源ID:4971869       资源大小:206KB        全文页数:62页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    字符串及其应用.ppt

    程序设计技术,C语言数据描述和C程序设计初步 结构化程序设计基础和C语言的控制结构 数组及其应用 函数与C程序结构 指针与函数 指针与数组 字符串及其应用 结构体类型和联合体类型 C语言的文件处理及其应用 位运算与枚举类型,字符串及其应用,C语言的字符串表示方法 字符串的常用处理方法及标准库函数,字符串表示方法,主要有两种方式来表示字符串,这两种方式是:使用指向字符类型变量的指针 通过定义字符类型指针变量,并将字符串或字符串常量的首地址赋给该指针,此后可以用该指向字符串的指针变量来表示其所指向的字符串数据,例如 char*sPtr;*sPtr=”This is C String.”;使用字符数组 首先定义字符类型的数组,然后将字符串数据的每一个字符依次存放到指定的字符数组中,此后的程序代码中可以使用该字符数组的名字表示其所存放的字符串数据。例如语句 char str7=”abcd”,字符串表示方法,两种字符串数据表示方式的根本区别(1)定义一个字符类型指针变量表示字符串 例如语句char*sPtr=”abcd”;系统处理的方法是首先在系统的内存储器中分配一段连续的存储区域并存放指定的字符串常量,然后将该存储区域的起始地址(字符串常量的首地址)赋值给字符类型指针变量sPtr,字符指针变量与其所指向的字符串常量之间的关系如图7.1a所示。由于sPtr是指针变量,可以根据需要指向任意合法的字符数据对象,所以在此后的程序代码中任何修改其指向的操作都是合法的,例如使用语句sPtr=”1234”使得指针变量sPtr改变指向从表示字符串数据”abcd”转变成为表示字符串数据”1234”,sPtr与其所指向的字符串常量之间的关系如图7.1b所示。,字符串表示方法,字符串表示方法,(2)定义字符类型数组表示字符串 例如语句char str7=”abcd”;,其本质意义是首先为字符数组str按指定长度在系统的内存储器中分配连续的存储区域,字符数组的名字str表示这段连续存储区域的起始地址,然后将该存储区域的内容初始化为字符串数据”abcd”,字符数组str与其初始值之间的关系如图7.2所示。,字符串表示方法,程序代码中任何试图修改数组名str值的操作或者试图为数组整体赋值的操作都是错误的,请比较下面的两段代码:/*正确的程序代码段*/char*sPtr=”abcd”;sPtr=”1234”;/*改变指针变量sPtr的指向*/*错误的程序代码段*/char str7=”abcd”;str=”1234”;/错误赋值操作,试图将数组作为整体操作,字符串表示方法,字符数组初始化的两种主要方法(1)使用单个字符常量初始化字符数组 用单个字符初始化时,将常量表中的字符依次赋值给对应得字符数组元素。在初始化时应注意以下几点:常量表中的最后一个字符应该是字符串结尾符号0字符;部分初始化时未赋值部分仍然是0字符;如果常量表中提供了所有的字符(包含0),可以省略数组的长度;下面是几个单个字符常量初始化字符数组的示例:char s19=N,e,w,Y,e,a,r,0;char s29=H,e,a,d,0;char s3=N,e,w,Y,e,a,r,0;,字符串表示方法,(2)使用字符串常量初始化字符数组 使用字符串常量对字符数组进行初始化时,系统会自动在末尾加上字符串结尾符号0,但定义的字符数组必须提供足够的长度。在初始化时应该注意以下几点:字符串常量只需要提供有效字符数据;字符串常量不足以填满整个字符数组空间时仍然使用0字符填充;字符串常量数据可以使用花括号括住,也可以使用;如果没有指定字符数组的长度,系统自动指定为字符串常量中有效字符的个数+1;下面是几个字符串常量初始化字符数组的示例:char s180=New Year;char s280=New Year;char s3=New Year;/此时字符数组的长度为9,字符串的输入输出,字符串数据的输入/*使用格式控制项%c*/char str10;int j;for(j=0;j9;j+)scanf(“%c”,/*字符串数据作为整体处理,系统会自动处理结尾符号*/,字符串的输入输出,scanf函数gets函数在使用时的两个不同之处(1)一次函数调用可以输入的字符串数据个数不同 scanf(“%s%s”,str1,str2);/*一次调用可以输入多 个用空格分隔的字符串*/gets(str1);/*一次调用之能够输入一个字符串*/(2)空格字符的处理不同 使用标准库函数scanf时,由于空格字符作为两个字符串数据的分隔符出现,所以在输入的字符串数据中不能含有空格字符;而使用标准库函数gets时,输入的字符串数据中可以含有空格字符。,字符串的输入输出,字符串数据的输出/*调用标准库函数printf使用格式控制项%c*/int j=0;while(strj!=0)/*用处理数组的概念处理字符串*/printf(“%c”,strj+);/*调用标准库函数printf使用格式控制项%s*/printf(“%s”,str);/*将字符串数据作为整体看待*/*使用标准库函数puts*/puts(str);/*将字符串数据作为整体看待*/,字符串的输入输出,printf函数和puts函数在使用时的两个不同之处(1)一次调用能够输出的字符串个数不同 printf(“%sn%s”,str1,str2);/*一次调用输出两个 以上的字符串数据*/puts(str1)/*一次调用只能输出一个字符串数据*/(2)输出数据换行处理方式不同 使用标准库函数puts输出字符串数据时,输出完成后会自动进行换行;而使用标准库函数printf时,一个字符串数据输出完成后不会自动换行,若需实现换行功能,需要在格式控制字符串中的适当位置插入换行字符n。例7-1 字符串数据的输入输出示例。,字符串的输入输出,例7-2 将字符串中小写字母转变成大写字母。/*Name:ex07-02.cpp*/#include void main()char string100,*p;printf(Please input a string:);gets(string);p=string;while(*p!=0)if(*p=a,字符串及其应用,C语言的字符串表示方法 字符串的常用处理方法及标准库函数,字符串的常用处理方法及标准库函数,字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组,字符串中有效字符的统计,字符串中有效字符的统计 所谓测试字符串的长度就是统计字符串中包含的有效字符个数。统计字符串中有效字符个数的基本思想非常简单,只需要从字符串数据的的第一个字符位置开始,依次向后判断该位置的字符是否系统规定的字符串数据结尾字符,当不是字符串数据结尾字符时则予以统计,直到遇到系统规定的字符串数据结尾符号为止。例7-3 字符串长度测试函数的原型为:int strlength(char s);编制该函数并用相应主函数进行测试。,字符串中有效字符的统计,/*Name:ex07-03.cpp*/#include void main()int strlength(char s);char str100;printf(Input the string:);gets(str);printf(The length of string is%dn,strlength(str);int strlength(char s)int i;for(i=0;si!=0;i+);return i;,字符串中有效字符的统计,在C标准库中提供了测试字符串长度的标准库函数strlen,函数的原型为:size_t strlen(const char*string);函数原型中的size_t是系统定义好的用于统计存储单元个数和重复次数的数据类型,实质上就是整型数据类型。函数的功能是:返回(获取)由string表示的字符串数据中的有效字符个数,统计在遇到字符串数据中的第一个系统字符串结尾字符0时结束。例7-4 颠倒字符串函数的原型为:void reverse(char s);,请编制该函数并用相应主函数测试。例7-5 一个从左读或从右读都是相同的单词称为回文,例如level是回文。编程序实现功能:判断输入一个字符串是否回文。,字符串的常用处理方法及标准库函数,字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组,字符串的复制,字符串的复制 字符串复制(拷贝)就是复制已经存在字符串的所有字符到指定目标位置,其基本思想是:从源字符串数据的第一个字符开始依次取出源字符串中的每一个字符,只要该字符不是系统规定的字符串结尾符号就将其赋值到指定的目标位置,直到源字符串中的所有有效字符取完为止。例7-6 函数的原型为:void strcopy(char s,char t);,其功能是将t所表示的字符串复制到s中去,请编制该函数并用相应主函数测试。,字符串的复制,/字符串拷贝的指针版本char*strcopy(char*s,char*t)char*p=s;while(*s+=*t+)!=0);return s;,字符串的复制,标准函数库中提供了相应的字符串拷贝函数,函数的原型为:char*strcpy(char*strDestination,const char*strSource);函数的功能是:将由strSource表示的源字符串拷贝到由strDestination指定的目标地址中,然后返回strDestination;strDestination所代表目标字符串的字节长度必须满足strSource所代表字符串的长度要求。例7-7 使用C标准库函数strcpy实现字符串的拷贝。,字符串的复制,字符串的复制应注意的事项 在实际的程序设计中,有可能存在着将源字符串从某一位置开始的字符拷贝到目标字符串的要求,对于这种要求可以通过调用函数时使用合适的实际参数予以满足,注意到下面三个重要事实:字符串的复制字符串处理函数中使用的字符数组样式形式参数本质上是一个指针量(地址量),对应的实际参数只需要地址量即可。在第4章中讨论过数组作参数的部分共享问题,可以将实参字符串的部分提供给形参数组共享。C语言中的字符串在存储时系统会为其添加字符串结尾符号,程序中处理字符串时只需要指出开始位置即可。,字符串的复制,例7-8 编程序实现将源字符串从指定位置开始拷贝到目标字符串的功能。/*Name:ex07-08.cpp*/#include#include void main()char s180,s280;int pos;printf(Input the string s1:);gets(s1);printf(Input the pos:);scanf(%d,例7-9 编程序实现将字符串的某部分删除的功能,删除的起点和长度从键盘输入。如果字符串中从起点开始剩余的字符数据不能满足长度要求则删去从起点开始的所有字符。,字符串的常用处理方法及标准库函数,字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组,字符串的连接,字符串的连接 所谓字符串的连接本质上也是字符串拷贝,与字符串复制不同的是需要将指定的源字符串数据中的每一个字符依次拷贝到指定的目标字符串最后一个有效字符的后面而不是目标串中的第一个位置。实现字符串连接的基本思想是:首先找到目标字符串的结尾处,然后从源字符串的第一个字符开始依次取出每一个有效字符并依次赋值到指定目标位置,直到源字符串中的字符处理完成为止。例7-10 函数原型为:void strjoin(char s,char t);,其功能是将t所表示的字符串连接到s所表示的字符串末尾,请编制该函数并用相应主函数测试。,字符串的连接,使用指针方式处理字符串连接的函数如下所示。char*strjoin(char*s,char*t)char*s1=s;while(*s)/寻找前串的末尾s+;while(*s+=*t+)!=0)/实现字符串连接;return s1;,字符串的连接,在标准函数库中提供了相应的字符串连接函数,函数的原型为:char*strcat(char*strDestination,const char*strSource);函数的功能是:将由strSource 表示的源字符串拷贝到由strDestination表示的目标字符串的末尾(即连接到strDestination所表示的字符串后),然后返回strDestination;strDestination所代表目标字符串的字节长度必须满足两个字符串连接后的长度要求。例7-11 使用C标准库函数strcat实现字符串的连接。例7-12 编程序实现将源字符串从指定位置开始连接到目标字符串的功能。,字符串的常用处理方法及标准库函数,字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组,字符串中字符的查找,字符串中字符的查找 所谓字符串中字符的查找就是按照指定的方向寻找指定字符第一次在字符串中出现的位置。在字符串中查找指定的字符从查找方向上可以分为正向查找(从串首部至串尾)和反向查找(从串尾部至串首),从获取被查找字符位置信息上可以分为返回下标序号方式和返回字符存放地址方式。,字符串中字符的查找,字符串中正向查找指定字符 在字符串中正向查找指定字符第一次出现位置的基本思想是:从被操作字符串的第一个字符开始循环依次取出被操作字符串当前位置的字符与指定的字符相比较,若比较相符合则返回该字符的位置;否则进行下一轮比较直到被处理的字符串中所有字符取完为止。例7-13 编制函数实现功能:在字符串中正向查找指定的字符,若被查找字符存在则返回字符在字符串中的下标序号;若指定的字符在被查找的字符串中不存在,则返回-1;并用相应主函数进行测试。例7-14 编程序实现功能:利用上面设计的字符查找函数求两个字符串中共同具有的字符并将这些字符组成第三个字符串,注意相同字符只能取一次。例7-15 重写例7.14程序,要求使用标准库函数strchr在字符串中查找指定字符。,字符串中字符的查找,字符串中反向查找指定字符 在字符串中反向查找指定字符第一次出现位置的基本思想是:从被操作字符串的最后一个字符开始循环依次取出被操作字符串当前位置的字符与指定的字符相比较,若比较相符合则返回该字符的位置;否则进行下一轮比较直到被处理的字符串中所有字符取完为止。例7-16 编制函数实现功能:在字符串中反向查找指定的字符,若被查找字符存在则返回字符在字符串中的下标序号;若指定的字符在被查找的字符串中不存在,则返回-1;并用相应主函数进行测试。,字符串中字符的查找,int Rsearch_chr(char s,char c)int i;for(i=strlen(s)-1;i=0;i-)if(si=c)return i;return-1;上面程序的函数Rsearch_chr实现方法与例7.13程序类似,惟一不同的地方是此时取出字符串中字符时是从字符串中的最后一个字符开始,字符串中最后一个字符的下标序号是:strlen(s)-1(字符串的长度减1)。,字符串中字符的查找,在C语言的标准函数库中提供了相应的在字符串中查找指定字符函数strchr,函数的原型为:char*strchr(const char*string,int c);函数的功能是:在由string表示的字符串中正向查找由c所表示的指定字符在字符串中首次出现的位置,若未找到则返回NULL。,字符串的常用处理方法及标准库函数,字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组,字符串中字符的插入和删除,在字符串指定位置插入字符 在字符串指定位置插入一个字符的基本思想是:首先在字符串中查找指定的位置,然后将字符串中从指定位置以后的所有字符由后向前依次向后移动一个字符位置以腾出所需要的字符插入空间;最后将指定的插入字符拷贝到该指定位置即可。字符的插入包括前插(插入的字符在指定位置原字符之前)和后插(插入的字符在指定位置原字符之后)两种方式,这两种方式的基本思想完全一致,不同之处在于字符串部分字符后移时是否包括指定位置的原字符。例7-17 编制函数实现功能:在字符串的指定字符之前插入另外一个指定字符,若在字符串中找不到插入位置,则将被插入字符添加到字符串末尾,并用相应主函数进行测试。,字符串中字符的插入和删除,在字符串中删除指定的字符 在字符串中删除指定字符操作的基本思想是:首先在字符串中查找指定字符的位置,若找到则将字符串中自该位置以后所有字符依次向前移动一个字符位置即可。例7-18 函数原型为:void deletechr(char s,char c);,其功能是在字符串中删除指定字符,若指定字符不存在则显示相应提示信息。请编制该函数并用相应主函数进行测试。,字符串中字符的插入和删除,考虑到在对字符串的处理过程中,只要能够确定起始地址,可以从字符串的任一位置开始处理字符串。在串中删去某个字符可以通过将被删除字符后所形成的字符串拷贝到字符位置的方法实现。例如上面例程序的字符删除函数deletechr可以修改为如下形式:void deletechr(char s,char c)char*p;p=strchr(s,c);/找到被删除字符的位置if(p!=NULL)strcpy(p,p+1);/字符串(p+1为起始地址)/拷贝到删除点覆盖被删字符elseprintf(%c不在%s中.n,c,s);,字符串的常用处理方法及标准库函数,字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组,字符串的比较和子串的查找,字符串的比较 比较两个字符串的基本思想是:从参与比较操作的两个字符串的第一个字符开始依次比较相同位置的两个对应字符,在下列两种情况之下结束比较过程:两个字符串中对应位置字符的ASCII码不相同;遇到两字符串中任何一个字符串的串结尾字符0;比较结束时,用该时刻两个字符串中对应位置字符的ASCII码差值来确定两个字符串之间的关系。设参加比较操作的两个字符串分别用s1和s2表示(其中s1表示前串,s2表示后串),则字符串比较结果的判断规则为:,字符串的比较和子串的查找,例7-19 函数的原型为:int strcompare(char s,char t);,其功能是比较两个字符串s和t的关系,比较规则如上所示,请编制函数strcompare并用相应主函数进行测试。,字符串的比较和子串的查找,int strcompare(char s,char t)int i;for(i=0;si=ti;i+)if(si=0)return 0;return si-ti;比较函数strcompare中,循环执行的条件是si=ti,即当遇到两个ASCII码值不相同的字符时循环结束,返回该位置两个字符ASCII码值之差(si-ti);当循环条件成立时则判断是否两个字符串同时结束,若是同时结束则返回数值0表示两个字符串相同;当对应位置的两个字符既相同且又不是结尾符号时,则取出下一对字符进行比较。,字符串的比较和子串的查找,在标准函数库中提供了相应的字符串比较函数,函数的原型为:int strcmp(const char*string1,const char*string2);函数的功能是:比较两个字符串string1和string2的关系,返回值确定规则为:如果string1大于string2,则返回值大于0;如果string1等于string2,返回值等于0;如果string1小于string2,返回值小于0。特别需要提醒读者注意的是,由于字符串本质上是字符数组,不能直接作为整体进行操作,所以不能用类似if(s1s2)的方式直接对字符串s1和s2进行比较,而应该使用串比较函数。例7-20 使用标准库函数比较两个字符串。,字符串的比较和子串的查找,有长度限制的字符串比较 程序设计中,子串指的是字符串中从某一位置开始连续的若干个字符构成的一个字符序列,对应于子串将包含子串的字符串称之为主串。一个子串也可以和主串是完全相同的,即子串由主串所有的字符构成。因为子串有可能是主串的一个连续的局部,为了在串中查找子串就必须研究比较两个字符串中从某个位置开始的有限长连续字符序列的问题。为了简单起见,假设开始位置为字符串的首字符(如需要从字符串中的其他位置开始,只需用地址的方式表示出起始点),即讨论比较两个字符串前n个字符构成的字符序列的关系。比较两个字符串前n个字符关系的与比较两个字符串关系的基本思想完全一致,判断比较结果的规则也相同,所不同的是多了一个比较的长度限制。,字符串的比较和子串的查找,例7-21 函数的原型为:int strncompare(char s,char t,int n);,其功能是比较两个字符串s和t前n个字符构成的字符串的关系,比较规则如下所示,请编制函数strncompare并用相应主函数进行测试。,字符串的比较和子串的查找,int strncompare(char s,char t,int n)int i;for(i=0;si=ti;i+)if(si=0|-n=0)return 0;return si-ti;在比较函数strncompare中,循环执行的条件是si=ti,即当遇到两个ASCII码值不相同的字符时循环结束,返回该位置两个字符ASCII码值之差(si-ti);当循环条件成立时则判断是否两个字符串同时结束或则是否已经比较过了指定的字符个数,在两个字符串同时结束或则已经比较过了指定的字符个数时返回数值0表示两个字符串前n个字符(或者两个字符串)相同;当对应位置的两个字符既相同,但该位置字符不是字符串结尾符号而且规定的字符比较次数又未完成时,则取出下一对字符进行比较。,字符串的比较和子串的查找,标准函数库中提供了相应的字符串比较函数,函数的原型为:int strncmp(const char*string1,const char*string2,size_t count);函数的功能是:比较连个字符串string1和string2 中至多前count个字符的关系,返回值确定规则为:如果string1大于string2,则返回值大于0;如果string1等于string2,返回值等于0;如果string1小于string2,返回值小于0。例7-22 使用标准库函数比较两个字符串前n个字符。,字符串的比较和子串的查找,字符串中子串的查找 在字符串中查找指定子串的基本思想是:首先在主串中查找子串的首字符,如果找到则比较主串中其后连续的若干个字符是否与参与比较的子串相同。如果相同则返回子串首字符在主串中出现的位置(序号或地址);否则在主串中向后继续查找直到在主串中再也找不到子串的首字符为止;当指定查找的字串在主串中不存在时,函数则返回-1(序号方式)或NULL(地址方式)。例7-23 函数的原型为:int findsubstr(char s,char t);,其功能是在实现在s串中查找子串t第一次出现的起始位置,若t是s的子串返回t在s中第一次出现的下标序号,否则返回-1。编制该函数并用相应主函数进行测试。,字符串的比较和子串的查找,/比较字符串前n个字符函数int strncompare(char s,char t,int n)int i;for(i=0;si=ti;i+)if(si=0|-n=0)return 0;return si-ti;上面函数findsubstr中,对于字符串s和t首先调用函数search_chr(在中介绍)在以&si开始的字符串中查找t串的首字符t0;然后在t串首字符找到的情况下调用函数strncompare(在中介绍)比较两个字符串&si和t前len(len是t串长度)个字符构成的字符序列,若比较结果为0则返回此时的i值表示子串的起始地址,当比较结果不为0时在字符串s中向后移动一个位置继续进行比较;若某一次在以&si开始的字符串中查找t串的首字符t0的结果为-1,则表示字符串t不是字符串s的子串。,字符串的比较和子串的查找,对于子串的查找还可以从另外一个方面去考虑,即从主串中的第一个字符开始,以后每次依次向后移动一个字符的位置,取出主串中与子串长度相等的前几个字符与子串比较。若相等则返回子串在主串中的起始位置,否则继续,直到主串查找完毕为止。若主串中不存在子串,返回-1。例7-24 重写例7.23程序以实现上述基本思想。/*Name:ex07.24.cpp 主函数和strncompare函数同例7.23*/int findsubstr(char s,char t)int strncompare(char s,char t,int n);int i=0,len=strlen(t);while(strncompare(,字符串的常用处理方法及标准库函数,字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组,字符串中子串的插入和删除,字符串中子串的插入 在字符串中插入子串基本思想和在字符串中指定位置插入字符类似,仍然是首先在字符串中找到插入位置,然后移动插入点之后的所有字符以腾出插入位置,最后进行插入操作。与插入一个字符不同的是要按欲插入的子串长度腾出足够的插入位置,也就是说,在准备插入空位时需要将字符向后移动过足够的跨距而不是一个字符位置。例7-25 函数的原型为:void insertsubstr(char s,char t);,其功能是实现子串插入功能,插入点为子串的首字符在主串中第一次出现的位置,若满足的要求的插入点不存在则给出相应提示信息。用相应主函数对子串插入函数进行测试。,字符串中子串的插入和删除,上面程序的insertsubstr函数中,用变量i记住s串的结尾位置,调用字符查找函数用变量jsearch_chr查找t串首字符t0在串s中第一次出现的位置并将该序号赋值给变量j;在t0在s中存在的情况下使用表达式si+len-1=si;从串s的结尾符号开始依次将字符向后移动插入t串所需要的长度,移动操作一直进行到移动插入点字符为止(用条件i=j控制,如采用ij则表示后插入);最后通过循环将字符串t的所有字符依次拷贝到所腾出的空间。例7-26 重写例7.25程序,其中子串插入函数insertsubstr的实现中要求充分利用C标准库函数。,字符串中子串的插入和删除,字符串中子串的删除 字符串中删除子串的基本思想和在字符串删除字符类似,仍然是首先在主串中找到欲删除的子串,然后向前移动被删除子串之后的所有字符。与删除一个字符不同的是要将子串后的字符向前移动过足够的跨距而不是一个字符位置。例7-27 函数的原型为:void delsubstr(char s,char t);,其功能是在一个主串中查找指定的子串,找到则将子串从主串中删除;若子串不存在则给出相应提示信息。,字符串中子串的插入和删除,函数delsubstr中首先调用子串查找函数findsubstr判断串t是否是串s的子串,若是则使用表达式spos=spos+len(其中len是字符串t的长度)将字符串s中自删区域后开始的字符向前移动t串的长度距离,移动操作反复进行直至串s中的字符移动完成为止。例7-28 重写例7.27程序,其中子串删除函数的实现中要求充分利用C标准库函数。,字符串的常用处理方法及标准库函数,字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组,字符串与二维字符数组,程序设计中如果需要处理多个相关的字符串,既可以使用二维字符数组,也可以使用字符指针数组来组织多个被处理的字符串。使用二维字符数组组织多个字符串 二维字符数组的定义形式如下:char 数组名常量表达式1常量表达式2;式中:常量表达式1的值表示了行数(即字符串的个数),常量表达式2的值表示了所处理的相关字符串中最长字符串所需要的存储长度。二维字符数组也可以进行初始化,初始化之按照字符串常量的形式出现在初始化值列表中。例如有如下所示二维数组定义语句,其数据存储形式如图7.4所示:char a510=C+,English,Computer,Physics,Maths.;,字符串与二维字符数组,例7-29 将若干个从键盘输入的字符串按升序排列并输出。,字符串与二维字符数组,使用字符指针数组组织多个字符串 实际应用中,被处理的若干字符串长度一般是不相等的,使用二维字符数组来存放这些字符串时,必须按照最长的字符串确定二维字符数组的列数(如图7.4所示),所以必然会浪费许多存储空间。为了避免存储空间的浪费,在C程序设计中常用指针数组处理多个字符串。定义一个字符指针数组就相当于同时定义了多个字符指针变量,字符型指针数组定义的一般形式是:char*数组名常量表达式 字符指针数组也可以进行初始化,其初始化值应该是字符串数据(或字符数组)的起始地址值,例如C语句:char*p=C+,ENGLISH,COMPUTER;表示定义了3个元素的字符指针数组,其数组元素是字符指针变量,分别指向对应的字符串,其关系如图7.5所示。,字符串与二维字符数组,p,C+0,ENGLISH 0,COMPUTER0,图7.5 用字符指针数组组织字符串,P0,P1,P2,字符串与二维字符数组,在使用字符指针数组组织字符串时需要特别注意的是:由于定义非全局、非静态的字符指针数组后,就相当于同时定义了若干个字符指针变量。在没有使这些对这些指针变量赋予地址值之前,它们都是空指针,这时除了将字符串常量的起始地址或NULL赋值给字符指针数组元素外,其他直接使用这些指针变量(字符指针数组元素)来接受字符串数据的方式都是错误的。例如:char*p10;p0=are;/正确的赋值语句,使得p0指向字符串 are p2=NULL;/正确的赋值语句,使得p2的值为空(NULL)gets(p1);/错误的输入字符串方法,p1是空指针 scanf(“%s”,p5);/错误的输入字符串方法,p5是空指针 例7-30 重写例7.29程序,要求使用字符指针数组组织欲处理的多个字符串数据。,

    注意事项

    本文(字符串及其应用.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开