第三次作业课件资料

上传人:hloru****lorv6 文档编号:71721436 上传时间:2022-04-07 格式:DOC 页数:12 大小:263KB
返回 下载 相关 举报
第三次作业课件资料_第1页
第1页 / 共12页
第三次作业课件资料_第2页
第2页 / 共12页
第三次作业课件资料_第3页
第3页 / 共12页
点击查看更多>>
资源描述
精选优质文档-倾情为你奉上高级软件编程技术作业课程报告 姓 名: 文钱坤 班号: 学 号:_ 组长: 院(系): 计算机学院 专业: 网络工程 指导教师: 职称: 2016 年 5 月 23 日 独立工作成果声明本人声明所呈交的高级软件编程技术作业报告,是我个人在导师指导下进行的程序编制工作及取得的成果。尽我所知,除文中已经标明的引用内容,和已经标明的他人工作外,本报告未包含任何抄袭自他人的工作成果。对本报告的工作做出贡献的个人,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 报告作者签名: 日期: 年 月 日专心-专注-专业题目:在这项任务,您需要执行一组函数的字符串操作,符合下列要求 (1)要超过8个函数(不包括overloaded);(2)必须尽可能为这些函数的参数添加const(3)尽可能用到引用与指针;(4)最少包括一个inline函数;(5)最少有四个函数被重载;(6)必须对至少两个函数进行异常处理;(7)必须使用默认参数;(8)不能用现有的用于字符串操作的库函数;(9)得到一个测试应以显示执行的函数的结果;(10)在测试用例,应处理命令行选择一个实现的功能或提供字符串。设计思路:首先,这次的作业是对字符串通过函数的调用来进行一系列的操作,但又没有具体到进行什么操作,所以我们不仅需要学习如何调用函数来对字符串进行处理,更要思考进行什么样的处理。那么为了实现不同的功能,并调用到总共至少12个函数,就需要定义多个函数,为了保证调用函数时的整洁和清晰,就需要用到switch语句来是的函数的调用更简洁明了,然后用不同的case来对不同的函数进行调用,那么这样的话就更加的有条理一些。而每次调用一个函数后,这个程序就直接结束了,再不能继续调用下一个函数,使得整个程序的操作就比较麻烦了,特别是一次要用到多个函数功能时,需要输入同一个字符串多遍,使得操作即麻烦,又容易出错。那么为了解决这个问题,我又在每一个case后面再重新调用main函数,那么这样的话,就能在case完成后,再次回到main函数,而不是直接结束程序了。因为至少要有8个不重载的函数和4个重载函数,那么就是至少需要12个函数,而且所有的函数都是对字符串进行各种操作,所以用数组来定义字符串,而不是用string来定义字符串。再就是需要想出对字符串能够进行什么样的不同操作,定义什么函数了。最先想到的就是计算一串字符串的长度了,因为字符串是用数组定义的,所以这个函数只需要用到一个while循环就可以得出长度了。第二个函数就是复制输入的字符串,那么这个函数的形参需要用到两个char *,把第一个字符数组复制给第二个字符数组,同样的根据数组,只需要用到一个while循环,然后直接赋值就完成了对字符串的复制。第三个函数是把两个字符串合并成为一个字符串,那么这个函数需要先将两个输入的数组a、b的长度求出来,然后再用for循环,将a、b的数组中存放的字符串赋给新的数组,然后再将新的数组输出,就是新的字符串了。第四个函数就是把输入的字符串小写转化成大写,这个就需要用到ascii码,把每个字符的数值直接减去32就是大写的数值了,再输出就是每个字母对应的大写了。第五个函数就是是大写转小写,其实这个函数与小写转大写函数基本是一样的,本质上都是通过ascii码字母的大小写间相差32来进行转换的。第六个函数就是字符串的倒序,把输入的字符串从后往前以相反的顺序输出,那么这个函数需要用到数字逻辑里学到的异或符号来是的字符反向输出,需要用 ai=aiaj;aj=aiaj;ai=aiaj;这三个语句就可以把输入的字符串从后往前输出了。当然,这个功能也可以直接在输出时按照数组的从后往前输出来实现,但这样没有用到函数,而且也不属于对字符串的操作了,所以我没有这样来做,而是通过异或符号来处理。第七个函数就是比较两个字符串的大小,这个函数的意思就是按照字母顺序比较两个字符串的大小,如果两个字符串一样长,那么就按照字母表顺序判断。如果不一样长,那么字符串长的比较大。为了实现这个功能,首先需要求出每个字符串的长度来比较,从而看能否一步判断出大小,如果不能,那么就需要通过比较字母在字母表中的位置来判断大小了。我用if判断和else判断,把返回值设为一个整数值,如果返回1,那么就代表第一个字符串大,如果返回2,那么就是第二个字符串大,如果是0,那么就一样大。这个函数在main函数中调用后,也需要用到if判断,然后输出到底是哪一个大。第八个函数是取字符串中的从第i位到第j位的字符,那么这个就不需要返回值了,所以我用的void类型,而且函数的形参需要四个参数,要两个字符串形参用来作为传入字符串和传出字符串,两个整数形参用来确定取字符的范围,进而通过数组的输出来实现这个功能。第九个函数就是对字符串按照字母表顺序进行排序,这个函数的实现需要比较字符串中字符的相对大小,那么对于字符数组来说,需要用到for循环来一一进行比较,然后用if进行判断,再进行位置的变换。而且由于定义的这个函数是void类型,那么就没有返回值,那么就需要将取出来的字符存储,然后在main函数中进行调用和输出就可以了。第十个函数是统计字符串中某一个字符出现了多少次,这个函数因为是统计次数,所以就需要定义这个函数的类型为int,返回值是出现的次数,然后就需要先将传入的字符串长度用第一个函数求出,然后遍历这个字符数组,并且用if判断,如果与相比较的字符一样,那么就需要i加一,最后return i,然后main函数就需要couti;这样的话这个函数就解决了。第十一个函数是判断两个字符串是否相同,对于这个函数,就需要遍历这两个函数,然后一一比较,如果其中有不同的字符,那么c就加一,并且break,那么此时c的值就是1。如果比较到结束都是相同的,那么c就一直为0,然后返回c的值。然后在主函数中加上判断。这样的话这个函数就完成了。第十二个函数是需要区别大小写的,所以又编写了一个不区分大小写并对两个字符串进行比较的函数,这个函数跟上一个基本差不多,唯一有区别的地方就是由于字符串中既有大写,又有小写,那么就需要加上if判断,我首先把大写都转化为小写,然后小写不变,这样再进行上一个函数的比较,这样的话,就可以得到不考虑两个字符串大小写问题的大小结果了。由于第四点的要求,需要定义inline函数。关于inline函数,它可以优化规模较小,流程直接的函数,所以我就定义了两个inline函数:分别是求字符串长度和求出某个字符第一次出现在字符串中的位置。接着是第五个要求,需要用到重载函数。所以我共定义了四个重载函数:求字符串长度重载与求出某字符第一次出现在字符串中的位置、对前n位小写转大写和对这个字符串小写转大写重载、比较前n个字符和比较整个字符串重载、不分大小写比较前n个字符和比较整个字符串重载。只需要在main函数中调用这几个被overloaded的函数时将函数的参数设置的不同,那么就能正确使用这些函数了。然后就是第六个要求:需要进行异常处理。那么就需要用到throw和try还有catch这三个模块。并且在定义的函数中用到if判断和throw模块,抛出问题,比如:判断某个字符在字符串中出现了多少次,首先就判断这个字符是否出现,如果没有出现就直接输出没有出现,并结束这一功能,返回到主界面,否则就通过输出字符出现的次数来运行。还有就是throw runtime_error(too large);然后在main函数中在try这个函数时catch住这个抛出的问题,输出重新输入,然后再重新载入main函数,让函数再run一遍,然后输入正确的字符串就可以了。接着就是第七个要求:必须使用默认参数。所以我在排序函数、统计字符数目函数中用到了默认参数。然后在调用函数的时候根本就不需要对于默认参数进行值传递,直接把没有默认参数的参数传入就可以了。然后接下来的要求就是不能用到对于字符串进行操作的库函数,以及需要得到结果。也就是说我不能用到string这个类型。最后一个要求就是需要用到命令行参数,需要用到argc、argv参数,那么我用这个可以得到我程序所在的地址,也就是可以得到一个字符串。那么这样的话,我就只需要将argv数组中的字符输出,就可以得到程序所在地址了。就可以用到for循环,然后将argv顺序输出,就可以得到地址了。这样的话,这个程序也就设计完成了。#include#includeusing namespace 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;bi;b+) if(a1b=a2) c+;break; if(c=0) return 0; else return b+1;void Capslock(char *a) int i=0; while(ai!=0) if(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(c20|d20) throw runtime_error(too large); else for(e=c;ec+d;e+) ae=bf; f+; ae=0;void Capslock(char *a,int n) for(int b=0;bn;b+) if(ab=a) ab=ab-32; void capslock(char *a) for(int b=0;ab!=0;b+) if(ab=A&abbi) 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;ij;i+) ai=aiaj; aj=aiaj; ai=aiaj; j-; for(i=0;ai!=0;i+) b=a; void paixu(char *a,int b=0,int c=0) char d; int e=length(a); for(b=0;be;+b) for(c=0;ce;+c) if(abac) 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;ei|nj) throw range_error(比较的位数太大); else for(i=0;in;+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;i200;+i) if(ai!=bi) +c; 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=97&ai=97&bii|nj) throw range_error(比较的位数太大); for(int i=0;i=97&ai=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;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; couta1; cout1.求字符串长度endl 2.字符串倒序endl 3.把两个字符串拼凑endl 4.字符串大写转小写endl 5.字符串小写转大写endl 6.复制字符串endl 7.取字符串中的某个字符endl 8.在字符串中判断给定字符的第一个出现位置endl 9.按字母顺序排序字符串endl 10.统计字符串的字符数目endl 11.比较两个字符串是否相同endl 12.比较前n个字符串endl 13.不分大小写并比较字符串前n个字符endl 14.不分大小写方式比较字符串endl 15.对字符串前n位进行大写转换endl 16.比较字符串大小endl choose; switch(choose) case 1:cout字符串长度为length(a1)endlendl;main(argc,argv); case 2:daoxu(a1); cout字符串倒序结果为:a1endlendl;main(argc,argv); case 3:couta2; trystrand(a1,a2);catch(runtime_error err) couterr.what()endl; cout重新输入endlendl;main(argc,argv); cout结果为:a1endlendl;main(argc,argv); case 4:capslock(a1); cout小写结果为:a1endlendl;main(argc,argv); case 5:Capslock(a1); cout大写结果为:a1endlendl;main(argc,argv); case 6:strcopy(a1,a2); cout字符串复制结果为:a2endlendl; main(argc,argv); case 7:coutxy; xuanding(a1,x,y,a4); couta4endlendl; main(argc,argv); case 8:coutb4; d4=length(a1,b4); if(d4=0) coutb4未出现endlendl; else coutb4出现在第d4个位置endlendl; main(argc,argv); case 9:paixu(a1); couta1endlendl; main(argc,argv); case 10:coutw;v=number(a1,w); cout这个字符出现了v次endlendl; main(argc,argv); case 11:couta4;u=same(a1,a4); if(u=0) cout两个字符串相同endlendl;main(argc,argv); else cout两个字符串不同endlendl;main(argc,argv); case 12:couta5;couts;tryr=same(a1,a5,s); catch(range_error err) couterr.what()endl; cout重新输入endlendl;main(argc,argv); if(r=0) cout比较的部分相同endlendl;main(argc,argv); else cout比较的部分不同endlendl;main(argc,argv); case 13:couta6;coutd1; tryb2=nolarge(a1,a6,d1); catch(range_error err) couterr.what()endl; cout重新输入endlendl;main(argc,argv); if(b2=0) cout两个字符串比较的部分相同endlendl;main(0,0); else cout两个字符串比较的部分不同endlendl;main(argc,argv); case 14:couta6;b1=nolarge(a1,a6); if(b1=0) cout两个字符串相同endlendl;main(argc,argv); else cout两个字符串不同endlendl;main(argc,argv); case 15:coutd3;cout转换结果是:; Capslock(a1,d3); couta1endlendl; main(argc,argv); case 16:couta3;t=large(a1,a3); if(t=0) cout两个字符串一样大:a1=a3endlendl; else if(t=1) cout比较后较大的结果为:a1endlendl; else if(t=2) cout比较后较大的结果为:a3endlendl; main(argc,argv); return 0;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!