第三次作业重点讲义资料_第1页
第三次作业重点讲义资料_第2页
第三次作业重点讲义资料_第3页
第三次作业重点讲义资料_第4页
第三次作业重点讲义资料_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、  高级软件编程技术作业课程报告     姓 名: 文钱坤 班号: 193152 学 号:20151004264_ 组长: 院(系): 计算机学院 专业: 网络工程 指导教师: 职称:   2016 年 5 月 23 日 独立工作成果声明本人声明所呈交的高级软件编程技术作业报告,是我个人在导师指导下进行的程序编制工作及取得的成果。尽我所知,除文中已经标明的引用内容,和已经标明的他人工作外,本报告未包含任何抄袭自他人的工作成果。对本报告的工作做出贡献的个人,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。

2、报告作者签名: 日期: 年 月 日题目:在这项任务,您需要执行一组函数的字符串操作,符合下列要求 (1)要超过8个函数(不包括overloaded);(2)必须尽可能为这些函数的参数添加const(3)尽可能用到引用与指针;(4)最少包括一个inline函数;(5)最少有四个函数被重载;(6)必须对至少两个函数进行异常处理;(7)必须使用默认参数;(8)不能用现有的用于字符串操作的库函数;(9)得到一个测试应以显示执行的函数的结果;(10)在测试用例,应处理命令行选择一个实现的功能或提供字符串。设计思路:首先,这次的作业是对字符串通过函数的调用来进行一系列的操作,但又没有具体到进行什么操作,所

3、以我们不仅需要学习如何调用函数来对字符串进行处理,更要思考进行什么样的处理。那么为了实现不同的功能,并调用到总共至少12个函数,就需要定义多个函数,为了保证调用函数时的整洁和清晰,就需要用到switch语句来是的函数的调用更简洁明了,然后用不同的case来对不同的函数进行调用,那么这样的话就更加的有条理一些。而每次调用一个函数后,这个程序就直接结束了,再不能继续调用下一个函数,使得整个程序的操作就比较麻烦了,特别是一次要用到多个函数功能时,需要输入同一个字符串多遍,使得操作即麻烦,又容易出错。那么为了解决这个问题,我又在每一个case后面再重新调用main函数,那么这样的话,就能在case完成

4、后,再次回到main函数,而不是直接结束程序了。因为至少要有8个不重载的函数和4个重载函数,那么就是至少需要12个函数,而且所有的函数都是对字符串进行各种操作,所以用数组来定义字符串,而不是用string来定义字符串。再就是需要想出对字符串能够进行什么样的不同操作,定义什么函数了。最先想到的就是计算一串字符串的长度了,因为字符串是用数组定义的,所以这个函数只需要用到一个while循环就可以得出长度了。第二个函数就是复制输入的字符串,那么这个函数的形参需要用到两个char *,把第一个字符数组复制给第二个字符数组,同样的根据数组,只需要用到一个while循环,然后直接赋值就完成了对字符串的复制。

5、第三个函数是把两个字符串合并成为一个字符串,那么这个函数需要先将两个输入的数组a、b的长度求出来,然后再用for循环,将a、b的数组中存放的字符串赋给新的数组,然后再将新的数组输出,就是新的字符串了。第四个函数就是把输入的字符串小写转化成大写,这个就需要用到ascii码,把每个字符的数值直接减去32就是大写的数值了,再输出就是每个字母对应的大写了。第五个函数就是是大写转小写,其实这个函数与小写转大写函数基本是一样的,本质上都是通过ascii码字母的大小写间相差32来进行转换的。第六个函数就是字符串的倒序,把输入的字符串从后往前以相反的顺序输出,那么这个函数需要用到数字逻辑里学到的异或符号来是的

6、字符反向输出,需要用 ai=aiaj;aj=aiaj;ai=aiaj;这三个语句就可以把输入的字符串从后往前输出了。当然,这个功能也可以直接在输出时按照数组的从后往前输出来实现,但这样没有用到函数,而且也不属于对字符串的操作了,所以我没有这样来做,而是通过异或符号来处理。第七个函数就是比较两个字符串的大小,这个函数的意思就是按照字母顺序比较两个字符串的大小,如果两个字符串一样长,那么就按照字母表顺序判断。如果不一样长,那么字符串长的比较大。为了实现这个功能,首先需要求出每个字符串的长度来比较,从而看能否一步判断出大小,如果不能,那么就需要通过比较字母在字母表中的位置来判断大小了。我用if判断和

7、else判断,把返回值设为一个整数值,如果返回1,那么就代表第一个字符串大,如果返回2,那么就是第二个字符串大,如果是0,那么就一样大。这个函数在main函数中调用后,也需要用到if判断,然后输出到底是哪一个大。第八个函数是取字符串中的从第i位到第j位的字符,那么这个就不需要返回值了,所以我用的void类型,而且函数的形参需要四个参数,要两个字符串形参用来作为传入字符串和传出字符串,两个整数形参用来确定取字符的范围,进而通过数组的输出来实现这个功能。第九个函数就是对字符串按照字母表顺序进行排序,这个函数的实现需要比较字符串中字符的相对大小,那么对于字符数组来说,需要用到for循环来一一进行比较

8、,然后用if进行判断,再进行位置的变换。而且由于定义的这个函数是void类型,那么就没有返回值,那么就需要将取出来的字符存储,然后在main函数中进行调用和输出就可以了。第十个函数是统计字符串中某一个字符出现了多少次,这个函数因为是统计次数,所以就需要定义这个函数的类型为int,返回值是出现的次数,然后就需要先将传入的字符串长度用第一个函数求出,然后遍历这个字符数组,并且用if判断,如果与相比较的字符一样,那么就需要i加一,最后return i,然后main函数就需要cout<<i;这样的话这个函数就解决了。第十一个函数是判断两个字符串是否相同,对于这个函数,就需要遍历这两个函数,

9、然后一一比较,如果其中有不同的字符,那么c就加一,并且break,那么此时c的值就是1。如果比较到结束都是相同的,那么c就一直为0,然后返回c的值。然后在主函数中加上判断。这样的话这个函数就完成了。第十二个函数是需要区别大小写的,所以又编写了一个不区分大小写并对两个字符串进行比较的函数,这个函数跟上一个基本差不多,唯一有区别的地方就是由于字符串中既有大写,又有小写,那么就需要加上if判断,我首先把大写都转化为小写,然后小写不变,这样再进行上一个函数的比较,这样的话,就可以得到不考虑两个字符串大小写问题的大小结果了。由于第四点的要求,需要定义inline函数。关于inline函数,它可以优化规模

10、较小,流程直接的函数,所以我就定义了两个inline函数:分别是求字符串长度和求出某个字符第一次出现在字符串中的位置。接着是第五个要求,需要用到重载函数。所以我共定义了四个重载函数:求字符串长度重载与求出某字符第一次出现在字符串中的位置、对前n位小写转大写和对这个字符串小写转大写重载、比较前n个字符和比较整个字符串重载、不分大小写比较前n个字符和比较整个字符串重载。只需要在main函数中调用这几个被overloaded的函数时将函数的参数设置的不同,那么就能正确使用这些函数了。然后就是第六个要求:需要进行异常处理。那么就需要用到throw和try还有catch这三个模块。并且在定义的函数中用到

11、if判断和throw模块,抛出问题,比如:判断某个字符在字符串中出现了多少次,首先就判断这个字符是否出现,如果没有出现就直接输出没有出现,并结束这一功能,返回到主界面,否则就通过输出字符出现的次数来运行。还有就是throw runtime_error("too large");然后在main函数中在try这个函数时catch住这个抛出的问题,输出"重新输入",然后再重新载入main函数,让函数再run一遍,然后输入正确的字符串就可以了。接着就是第七个要求:必须使用默认参数。所以我在排序函数、统计字符数目函数中用到了默认参数。然后在调用函数的时候根本就不需

12、要对于默认参数进行值传递,直接把没有默认参数的参数传入就可以了。然后接下来的要求就是不能用到对于字符串进行操作的库函数,以及需要得到结果。也就是说我不能用到string这个类型。最后一个要求就是需要用到命令行参数,需要用到argc、argv参数,那么我用这个可以得到我程序所在的地址,也就是可以得到一个字符串。那么这样的话,我就只需要将argv数组中的字符输出,就可以得到程序所在地址了。就可以用到for循环,然后将argv顺序输出,就可以得到地址了。这样的话,这个程序也就设计完成了。#include<iostream>#include<stdexcept>using na

13、mespace std;void strcopy(const char *a,char *b) int i=0; while(ai!='0') bi=ai; i+; inline int length( char *a1) int i=0; while(a1i!='0') +i; return i;inline int length(char *a1,char a2) int c=0,i,b; for(i=0;a1i!='0'i+) for(b=0;b<i;b+) if(a1b=a2) c+;break; if(c=0) return 0;

14、 else return b+1;void Capslock(char *a) int i=0; while(ai!='0') if(ai<='z'&&ai>='a') ai=ai-32; i+; void strand(char *a,const char *b) int c,d,e,f=0; for(c=0;ac!='0'c+) for(d=0;bd!='0'd+) if(c>20|d>20) throw runtime_error("too large&quo

15、t;); else for(e=c;e<c+d;e+) ae=bf; f+; ae='0'void Capslock(char *a,int n) for(int b=0;b<n;b+) if(ab<='z'&&ab>='a') ab=ab-32; void capslock(char *a) for(int b=0;ab!='0'b+) if(ab>='A'&&ab<='Z') ab-='A'-'a'

16、; int large(const char *const a,const char *b) int i=0; for(i=0;ai!='0'&&bi!='0'i+) if(ai=bi) if(ai+1='0'&&bi+1='0') return 0; else if(ai+1!='0'&&bi+1='0') return 1; elseif(ai+1='0'&&bi+1!='0') return 2;

17、else if(ai>bi) return 1; else return 2; void xuanding(const char *a,const int &b,const int &c,char *d) int e,f=0; for(e=b-1;e<=c-1;+e) df=ae; +f; void daoxu(char *a) int i,j=i-1; char *b; for(i=0;ai!='0'i+) for(i=0;i<j;i+) ai=aiaj; aj=aiaj; ai=aiaj; j-; for(i=0;ai!='0

18、9;i+) b=a; void paixu(char *a,int b=0,int c=0) char d; int e=length(a); for(b=0;b<e;+b) for(c=0;c<e;+c) if(ab<ac) d=ab; ab=ac; ac=d; int number(char *a,char &b,int c=0) int d,e; for(d=0;ad!='0'+d) for(e=0;e<=d;+e) if(b=ae) +c; return c;int same(const char *a,const char *b,int

19、 n) int c=0,i,j; for(i=0;ai!='0'+i) for(j=0;bj!='0'+j) if(n>i|n>j) throw range_error("比较的位数太大"); else for(i=0;i<n;+i) if(ai!=bi) c+; if(c!=0) break; if(ai=0|bi=0) break; return c;int same(const char *a,const char *b) int c=0; for(int i=0;i<200;+i) if(ai!=bi) +c;

20、 if(c!=0) break; if(c=0) break; return c;int nolarge(const char *a,const char *b) int c=0; for(int i=0;i<200;+i) char a1,b1; if(ai>=97&&ai<=122) a1=ai-32; else a1=ai; if(bi>=97&&bi<=122) b1=bi-32; else b1=bi; if(a1!=b1) +c; if(c!=0) break; if(ai=0|bi=0) break; return c

21、;int nolarge(const char *a,const char *const b,int &n) int c=0,i,j; for(i=0;ai!='0'+i) for(j=0;bj!='0'+j) if(n>i|n>j) throw range_error("比较的位数太大"); for(int i=0;i<n;+i) char a1,b1; if(ai>=97&&ai<=122) a1=ai-32; else a1=ai; if(bi>=97&&bi&

22、lt;=122) b1=bi-32; else b1=bi; if(a1!=b1) +c; if(c!=0) break; if(ai=0|bi=0) break; return c;int main(int argc,char *argv) char a120,a220,a320,a420,a520,a620,w,b4; int choose,t,x,y,v,u,s,r,b1,d1,b2,d2,b3,d3,d4,d5; cout<<"输入字符串:" cin>>a1; cout<<"1.求字符串长度"<<e

23、ndl <<"2.字符串倒序"<<endl <<"3.把两个字符串拼凑"<<endl <<"4.字符串大写转小写"<<endl <<"5.字符串小写转大写"<<endl <<"6.复制字符串"<<endl <<"7.取字符串中的某个字符"<<endl <<"8.在字符串中判断给定字符的第一个出现位置"&

24、lt;<endl <<"9.按字母顺序排序字符串"<<endl <<"10.统计字符串的字符数目"<<endl <<"11.比较两个字符串是否相同"<<endl <<"12.比较前n个字符串"<<endl <<"13.不分大小写并比较字符串前n个字符"<<endl <<"14.不分大小写方式比较字符串"<<endl <&l

25、t;"15.对字符串前n位进行大写转换"<<endl <<"16.比较字符串大小"<<endl <<"输入选项:" cin>>choose; switch(choose) case 1:cout<<"字符串长度为"<<length(a1)<<endl<<endl;main(argc,argv); case 2:daoxu(a1); cout<<"字符串倒序结果为:"<&l

26、t;a1<<endl<<endl;main(argc,argv); case 3:cout<<"输入第二个字符串:" cin>>a2; trystrand(a1,a2);catch(runtime_error err) cout<<err.what()<<endl; cout<<"重新输入"<<endl<<endl;main(argc,argv); cout<<"结果为:"<<a1<<endl

27、<<endl;main(argc,argv); case 4:capslock(a1); cout<<"小写结果为:"<<a1<<endl<<endl;main(argc,argv); case 5:Capslock(a1); cout<<"大写结果为:"<<a1<<endl<<endl;main(argc,argv); case 6:strcopy(a1,a2); cout<<"字符串复制结果为:"<<

28、a2<<endl<<endl; main(argc,argv); case 7:cout<<"对第一串字符取第几到第几位:" cin>>x>>y; xuanding(a1,x,y,a4); cout<<a4<<endl<<endl; main(argc,argv); case 8:cout<<"输入需要判断的字符:" cin>>b4; d4=length(a1,b4); if(d4=0) cout<<b4<<&q

29、uot;未出现"<<endl<<endl; else cout<<b4<<"出现在第"<<d4<<"个位置"<<endl<<endl; main(argc,argv); case 9:paixu(a1); cout<<a1<<endl<<endl; main(argc,argv); case 10:cout<<"输入一个字符:" cin>>w;v=number(a1,w)

30、; cout<<"这个字符出现了"<<v<<"次"<<endl<<endl; main(argc,argv); case 11:cout<<"输入第二个字符串:"cin>>a4;u=same(a1,a4); if(u=0) cout<<"两个字符串相同"<<endl<<endl;main(argc,argv); else cout<<"两个字符串不同"<<

31、;endl<<endl;main(argc,argv); case 12:cout<<"输入第二个字符串:"cin>>a5;cout<<"输入比较的位数:" cin>>s;tryr=same(a1,a5,s); catch(range_error err) cout<<err.what()<<endl; cout<<"重新输入"<<endl<<endl;main(argc,argv); if(r=0) cout<<"比较的部分相同"<<endl<<endl;main(argc,argv); else cout<<"比较的部分不同"<<endl<<endl;main(argc,argv); case 13:cout<<"输入第二个字符串:"cin>>a6;cout<<"输入比较的位数:"cin>>d1; tryb2=nolarge(a1,a6,d1);

温馨提示

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

评论

0/150

提交评论