第7章字符串及其应用.ppt
《第7章字符串及其应用.ppt》由会员分享,可在线阅读,更多相关《第7章字符串及其应用.ppt(62页珍藏版)》请在三一文库上搜索。
1、程序设计技术,C语言数据描述和C程序设计初步 结构化程序设计基础和C语言的控制结构 数组及其应用 函数与C程序结构 指针与函数 指针与数组 字符串及其应用 结构体类型和联合体类型 C语言的文件处理及其应用 位运算与枚举类型,字符串及其应用,C语言的字符串表示方法 字符串的常用处理方法及标准库函数,字符串表示方法,主要有两种方式来表示字符串,这两种方式是: 使用指向字符类型变量的指针 通过定义字符类型指针变量,并将字符串或字符串常量的首地址赋给该指针,此后可以用该指向字符串的指针变量来表示其所指向的字符串数据,例如 char *sPtr; *sPtr=”This is C String.”; 使
2、用字符数组 首先定义字符类型的数组,然后将字符串数据的每一个字符依次存放到指定的字符数组中,此后的程序代码中可以使用该字符数组的名字表示其所存放的字符串数据。例如语句 char str7=”abcd”,字符串表示方法,两种字符串数据表示方式的根本区别 (1) 定义一个字符类型指针变量表示字符串 例如语句char *sPtr=”abcd”; 系统处理的方法是首先在系统的内存储器中分配一段连续的存储区域并存放指定的字符串常量,然后将该存储区域的起始地址(字符串常量的首地址)赋值给字符类型指针变量sPtr,字符指针变量与其所指向的字符串常量之间的关系如图7.1a所示。由于sPtr是指针变量,可以根据
3、需要指向任意合法的字符数据对象,所以在此后的程序代码中任何修改其指向的操作都是合法的,例如使用语句sPtr=”1234”使得指针变量sPtr改变指向从表示字符串数据”abcd”转变成为表示字符串数据”1234”,sPtr与其所指向的字符串常量之间的关系如图7.1b所示。,字符串表示方法,字符串表示方法,(2) 定义字符类型数组表示字符串 例如语句char str7=”abcd”;, 其本质意义是首先为字符数组str按指定长度在系统的内存储器中分配连续的存储区域,字符数组的名字str表示这段连续存储区域的起始地址,然后将该存储区域的内容初始化为字符串数据”abcd”,字符数组str与其初始值之间
4、的关系如图7.2所示。,字符串表示方法,程序代码中任何试图修改数组名str值的操作或者试图为数组整体赋值的操作都是错误的,请比较下面的两段代码: /*正确的程序代码段*/ char *sPtr=”abcd”; sPtr=”1234”; /*改变指针变量sPtr的指向*/ /*错误的程序代码段*/ char str7=”abcd”; str=”1234”;/错误赋值操作,试图将数组作为整体操作,字符串表示方法,字符数组初始化的两种主要方法 (1) 使用单个字符常量初始化字符数组 用单个字符初始化时,将常量表中的字符依次赋值给对应得字符数组元素。在初始化时应注意以下几点: 常量表中的最后一个字符应
5、该是字符串结尾符号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,但定义的字符数组必须提供足够的长度。在初始化时应该注意以下几点: 字符串常量只需要提供有效字符数据; 字符串常
6、量不足以填满整个字符数组空间时仍然使用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”, /*字符串数据作为整体处理,系统会自动处理结尾符号*/,字符串的输
7、入输出,scanf函数gets函数在使用时的两个不同之处 (1) 一次函数调用可以输入的字符串数据个数不同 scanf(“%s%s”,str1, str2);/*一次调用可以输入多 个用空格分隔的字符串*/ gets(str1);/*一次调用之能够输入一个字符串*/ (2) 空格字符的处理不同 使用标准库函数scanf时,由于空格字符作为两个字符串数据的分隔符出现,所以在输入的字符串数据中不能含有空格字符;而使用标准库函数gets时,输入的字符串数据中可以含有空格字符。,字符串的输入输出,字符串数据的输出 /*调用标准库函数printf使用格式控制项%c*/ int j=0; while(st
8、rj!=0)/*用处理数组的概念处理字符串*/ printf(“%c”,strj+); /*调用标准库函数printf使用格式控制项%s*/ printf(“%s”,str); /*将字符串数据作为整体看待*/ /*使用标准库函数puts*/ puts(str); /*将字符串数据作为整体看待*/,字符串的输入输出,printf函数和puts函数在使用时的两个不同之处 (1) 一次调用能够输出的字符串个数不同 printf(“%sn%s”,str1, str2);/*一次调用输出两个 以上的字符串数据*/ puts(str1) /*一次调用只能输出一个字符串数据*/ (2) 输出数据换行处理方
9、式不同 使用标准库函数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 ,字
10、符串及其应用,C语言的字符串表示方法 字符串的常用处理方法及标准库函数,字符串的常用处理方法及标准库函数,字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组,字符串中有效字符的统计,字符串中有效字符的统计 所谓测试字符串的长度就是统计字符串中包含的有效字符个数。统计字符串中有效字符个数的基本思想非常简单,只需要从字符串数据的的第一个字符位置开始,依次向后判断该位置的字符是否系统规定的字符串数据结尾字符,当不是字符串数据结尾字符时则予以统计,直到遇到系统规定的字符串数据结尾符号
11、为止。 例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+) ;
12、return i; ,字符串中有效字符的统计,在C标准库中提供了测试字符串长度的标准库函数strlen,函数的原型为: size_t strlen( const char *string ); 函数原型中的size_t是系统定义好的用于统计存储单元个数和重复次数的数据类型,实质上就是整型数据类型。函数的功能是:返回(获取)由string表示的字符串数据中的有效字符个数,统计在遇到字符串数据中的第一个系统字符串结尾字符0时结束。 例7-4 颠倒字符串函数的原型为:void reverse(char s);,请编制该函数并用相应主函数测试。 例7-5 一个从左读或从右读都是相同的单词称为回文,例如
13、level是回文。编程序实现功能:判断输入一个字符串是否回文。,字符串的常用处理方法及标准库函数,字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组,字符串的复制,字符串的复制 字符串复制(拷贝)就是复制已经存在字符串的所有字符到指定目标位置,其基本思想是:从源字符串数据的第一个字符开始依次取出源字符串中的每一个字符,只要该字符不是系统规定的字符串结尾符号就将其赋值到指定的目标位置,直到源字符串中的所有有效字符取完为止。 例7-6 函数的原型为:void strcopy(ch
14、ar 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指定的目标地址中,然后返回str
15、Destination;strDestination所代表目标字符串的字节长度必须满足strSource所代表字符串的长度要求。 例7-7 使用C标准库函数strcpy实现字符串的拷贝。,字符串的复制,字符串的复制应注意的事项 在实际的程序设计中,有可能存在着将源字符串从某一位置开始的字符拷贝到目标字符串的要求,对于这种要求可以通过调用函数时使用合适的实际参数予以满足,注意到下面三个重要事实: 字符串的复制字符串处理函数中使用的字符数组样式形式参数本质上是一个指针量(地址量),对应的实际参数只需要地址量即可。 在第4章中讨论过数组作参数的部分共享问题,可以将实参字符串的部分提供给形参数组共享。
16、 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 编程序实现将字符串的某部分删除的功能,删除的起点和长度从键盘输入。如果字符串中从起点
17、开始剩余的字符数据不能满足长度要求则删去从起点开始的所有字符。,字符串的常用处理方法及标准库函数,字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组,字符串的连接,字符串的连接 所谓字符串的连接本质上也是字符串拷贝,与字符串复制不同的是需要将指定的源字符串数据中的每一个字符依次拷贝到指定的目标字符串最后一个有效字符的后面而不是目标串中的第一个位置。实现字符串连接的基本思想是:首先找到目标字符串的结尾处,然后从源字符串的第一个字符开始依次取出每一个有效字符并依次赋值到指定目标位
18、置,直到源字符串中的字符处理完成为止。 例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 *str
19、Destination, const char *strSource ); 函数的功能是:将由strSource 表示的源字符串拷贝到由strDestination表示的目标字符串的末尾(即连接到strDestination所表示的字符串后),然后返回strDestination;strDestination所代表目标字符串的字节长度必须满足两个字符串连接后的长度要求。 例7-11 使用C标准库函数strcat实现字符串的连接。 例7-12 编程序实现将源字符串从指定位置开始连接到目标字符串的功能。,字符串的常用处理方法及标准库函数,字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中
20、字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组,字符串中字符的查找,字符串中字符的查找 所谓字符串中字符的查找就是按照指定的方向寻找指定字符第一次在字符串中出现的位置。在字符串中查找指定的字符从查找方向上可以分为正向查找(从串首部至串尾)和反向查找(从串尾部至串首),从获取被查找字符位置信息上可以分为返回下标序号方式和返回字符存放地址方式。,字符串中字符的查找,字符串中正向查找指定字符 在字符串中正向查找指定字符第一次出现位置的基本思想是:从被操作字符串的第一个字符开始循环依次取出被操作字符串当前位置的字符与指定的字符相比较,若比
21、较相符合则返回该字符的位置;否则进行下一轮比较直到被处理的字符串中所有字符取完为止。 例7-13 编制函数实现功能:在字符串中正向查找指定的字符,若被查找字符存在则返回字符在字符串中的下标序号;若指定的字符在被查找的字符串中不存在,则返回-1;并用相应主函数进行测试。 例7-14 编程序实现功能:利用上面设计的字符查找函数求两个字符串中共同具有的字符并将这些字符组成第三个字符串,注意相同字符只能取一次。 例7-15 重写例7.14程序,要求使用标准库函数strchr在字符串中查找指定字符。,字符串中字符的查找,字符串中反向查找指定字符 在字符串中反向查找指定字符第一次出现位置的基本思想是:从被
22、操作字符串的最后一个字符开始循环依次取出被操作字符串当前位置的字符与指定的字符相比较,若比较相符合则返回该字符的位置;否则进行下一轮比较直到被处理的字符串中所有字符取完为止。 例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_c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串 及其 应用
链接地址:https://www.31doc.com/p-2257718.html