网站大量收购独家精品文档,联系QQ:2885784924

C++程序设计 第二版 杨长兴 第四章.ppt

  1. 1、本文档共114页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计第二版杨长兴第四章

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4.4.5字符串的简单应用举例 【例4.12】 编写函数void del_ch(char *p,char ch),删除p所指字符串中的ch字符。 若p所指串为”changsha”,调用该函数删除其中的’a’便得到结果字符串”chngsh”。同时编写主函数调用它。 分析:为便于理解,首先假设用一片连续字节空间存放结果字符串,且用q指向这片空间的首字节,如图4.17中的初始状态, p指向待处理字符串的首字节。现用循环控制:逐个判断p指向的字符是否为要删除的字符,若不是,将p指向的字符复制到q指向的首字节,并使p、q都增加1下移一个字节;若p指向的是要删除的字符(’a’)时不复制,此时指针p仍然增加1下移一个字节,而q不下移,如图4.17中的第3次循环。图4.X只表示了前4次循环,后面继续循环直到处理完整个字符串。其实可将结果字符串仍存放在原待处理的字符串所占的空间中,因为复制后面的字符操作不影响前面已复制过来的字符,复制前面的字符操作也不影响后面还没被复制的字符。 //*****ex4_12.cpp***** #include iostream using namespace std; void del_ch(char *p,char ch) //定义函数 { char *q=p; for(;*p!=\0;p++) if (*p!=ch) // 若p指向的字符 不是 要删除的 字符 则复制 {*q=*p; q++; } // 本复合语句 等效于 *q++=*p; *q=\0; // 添加串结尾符 } void main() { void del_ch(char *,char); char str[80],ch; cout”Input a string:\n; cin.getline(str, 80,\n); //当输入了79个字符或遇到回车符,就表示输入完毕 coutInput the char deleted:\n; cinch; del_ch(str,ch); coutThen new string is:\n; coutstrendl; } 当一个数组的元素都是指针类型数据时,该数组就称为指针数组。一维指针数组的定义形式为: 类型符 *数组名[常量表达式]; 其中常量表达式用于指明数组元素的个数;类型符指明指针数组元素应指对象的类型。数组名之前的*是必需的,由于它出现在数组名之前,使该数组成为指针数组。例如 int *p[10]; 定义指针数组p[],它有10个元素,每个元素都是指向int型变量的指针变量。和一般的数组定义一样,数组名p是第一个元素即p[0]的地址。 4.5 指针数组与多级指针 4.5.1指针数组 【例4.13】 编写void sort(char *p[],int n),用选择法(在【例4.2】中已介绍)将指针数组p元素按元素所指字符串大小从小到大排序,即让p[0]指向最小的串,p[n-1]指向最大的串,而不改变字符串的存储位置。编写main()等相关函数构成完整程序。要求从键盘输入各字符串,且输出排序结果。 分析:从要求可知,sort( )开始执行时,若数组p中6个元素及其指向的字符串如图4.18(a)所示, sort( )执行后,6个元素的指向发生改变,结果如图4.18(b)所示。此处对数组p选择排序,每次确定p两元素大小关系时,不是比较两元素本身,而是比较两元素指向的串。因此将【例4.2】中的数组元素比较运算改用strcmp(p[k],p[j])即可。 void sort(char *v[],int n) { int i,j,k; char *t; for(i=0;in-1;i++) { k=i; for(j=i+1;jn;j++) if (strcmp(v[k],v[j])0) k=j; if (k!=i) { t=v[i]; v[i]=v[k]; v[k]=t; } } } void write(char *nameptr[],int

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档