您好,欢迎访问三七文档
课程实践报告设计题目:程序设计实践(VC++)设计时间至2015-3-13学院(系):电子信息学院专业班级:学生姓名:学号指导老师:任务一一、实践任务9.定义一个字符串类CString,并设计一个算法对该串中各个不同字符出现的频率进行统计。二、详细设计1、类的描述与定义(1)私有数据成员char*str:指向要统计的字符串。char(*p)[2]:动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的次数(次数在存放时,用该数字对应的ASCII值存放;在输出次数时,输出该ASCII字符对应的ASCII值即可)。intsize:存放字符串中出现的所有不同的字符的个数。(2)公有成员函数CString(char*s):根据s参数初始化数据成员str;p和size初始值为0。voidCount():p根据s所指字符串长度分配空间。然后把str所指字符串中的每个字符放入p数组中,设置每个字符的出现次数为1。根据p数组统计不同字符出现的频率,并求得size的实际大小。最后根据size的实际大小,重新分配p所指空间,并把不同字符及其出现次数重新放回p数组(提示:可以借助临时数组或指针来实现)。voidShow():屏幕显示字符串、字符串的每个字符和与之对应的次数。~CString():释放动态分配的空间。2、主要函数设计在主程序中定义字符串chars[]=”abdabcdesffffd”。定义一个CString类对象test,用s以初始化test,完成对该类的测试。三、源程序清单#includeiostream.h#includestring.hclassCString{private:char*str;char(*p)[2];intsize;public:CString(char*s){str=newchar[strlen(s)+1];strcpy(str,s);size=0;p=0;}voidCount();voidShow();~CString(){if(str)deletestr;}};voidCString::Count(){p=newchar[strlen(str)][2];inti,j,k;for(i=0,j=0;istrlen(str);i++){p[i][j]=str[i];p[i][j+1]=1;}char*part1=newchar[strlen(str)+1];int*part2=newint[strlen(str)+1];for(i=0;istrlen(str);i++){part1[i]='\0';}for(i=0;istrlen(str);i++){part2[i]=0;}for(i=0;istrlen(str);i++){for(j=i;jstrlen(str);j++){intcount;for(k=0,count=0;ksize;k++){if(part1[k]==p[i][0])count++;}if(count==1)break;else{part1[size]=p[i][0];size++;}}}for(k=0;ksize;k++){for(i=0;istrlen(str);i++){if(part1[k]==p[i][0]){part2[k]++;}}}delete[]p;p=newchar[size][2];for(i=0;isize;i++){p[i][0]=part1[i];p[i][1]=part2[i];}delete[]part1;delete[]part2;}voidCString::Show(){cout原字符串为:strendl;cout不同的字符数:sizeendl;cout字符串中的每个字符为:endl;for(inti=0;isize;i++)coutp[i][0]''次数(int)p[i][1]endl;}voidmain(){chars[]=abdabcdesffffd;CStringtest(s);test.Count();test.Show();}四、实践小结可建立临时数组,帮助判断。五、运行结果任务二一、实践任务10.定义一个字符串类CString,并设计一个算法实现,给定关键字str1在字符串str中出现时用关键字str2进行替换的功能。二、详细设计1、类的描述与定义(1)私有数据成员char*str;原始字符串。char*str1;目标关键字。char*str2;替换关键字。intflag;标记替换是否完成替换。(2)公有成员函数CString(char*s,chars1[],char*s2):用给定的参数s、s1和s2相对应的初始化数据成员str、str1和str2。flag设置缺省0。voidReplace():判断str字符串中是否出现str1,若出现就用str2替换,否则什么都不做。若替换成功了标记flag为1,若替换不成功则标记flag为0。voidShow():若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始字符串;若不成功则显示原始字符串。~CString():释放动态分配的空间。2、主要函数设计在主程序中定义字符串chars[]=”Iamstudent,youarestudenttoo,weareallstudent.”作为原始字符串,定义chars1[]=”student”作为目标关键字,定义chars2[]=”teacher”作为替换关键字。定义一个CString类对象test,用s,s1和s2初始化test,完成对该类的测试。三、源程序清单#includeiostream.h#includestring.hclassCString{private:char*str;char*str1;char*str2;intflag;public:CString(char*s,chars1[],char*s2){str=newchar[strlen(s)+strlen(s2)+strlen(s1)+1];str1=newchar[strlen(s1)+1];str2=newchar[strlen(s2)+1];strcpy(str,s);strcpy(str1,s1);strcpy(str2,s2);flag=0;}voidReplace();voidShow();~CString(){if(str)delete[]str;if(str1)delete[]str1;if(str2)delete[]str2;}};voidCString::Replace(){inti=0;intk=0,count=0;while(str[i]){while(str[i]!=str1[0]&&str[i])i++;if(istrlen(str)){if(strncmp(str+i,str1,strlen(str1))==0)k=1;}if(k){char*turn=newchar[strlen(str)+strlen(str1)+strlen(str2)+1];strncpy(turn,str,i);turn[i]=0;strcat(turn,str2);strcat(turn,str+i+strlen(str1));strcpy(str,turn);delete[]turn;i=i+strlen(str2);k=0;count++;}}if(count)flag=1;}voidCString::Show(){if(flag)cout目标关键字:str1'\n'替换关键字:str2'\n'替换后的原始字符串:strendl;elsecout原始字符串:strendl;}voidmain(){chars[]=Iamstudent,youarestudenttoo,weareallstudent.;chars1[]=student;chars2[]=teacher;CStringtest(s,s1,s2);test.Replace();test.Show();}四、实践小结利用临时字符数组,进行字符替代。五、运行结果任务三一、实践任务22.建立一个类Saddle_point,求一个数组中的所有鞍点。提示:鞍点是这样的数组元素,其值在它所在行中为最大,在它所在列中为最小。二、详细设计1、类的描述与定义(1)私有数据成员inta[4][4]:存放二维数组元素。intb[4][4]:存放二维数组中的鞍点值。intnum:存放鞍点个数。(2)公有成员函数Saddle_point(intdata[][4]):构造函数,用参数intdata[][4]初始化数组a,,同时初始化数组b与num的值均为0。voidprocess():求数组a所有鞍点(如果有鞍点),把它们行、列、及值相应存放在数组b中,并将求出的鞍点个数赋给num。voidprint():输出数组a、鞍点个数,与鞍点坐标及相应值。2、主要函数设计在主程序中定义数组intb[][4]={2,6,3,4,5,6,5,5,5,7,6,7,1,9,2,7}作为原始数组。定义一个Saddle_point类对象fun。通过fun调用成员函数完成求鞍点及输出工作。三、源程序清单#includeiostream.hclassSaddle_point{private:inta[4][4];intb[4][4];intnum;public:Saddle_point(intdata[][4]){for(inti=0;i4;i++){for(intj=0;j4;j++){a[i][j]=data[i][j];b[i][j]=0;}}num=0;}voidprocess();voidprint();};voidSaddle_point::process(){inti,j,k;intm=0,n=0;for(i=0;i4;i++){for(j=0;j4;j++){m=n=0;for(k=0;k4;k++){if(a[i][j]=a[i][k])m++;elsebreak;if(a[i][j]=a[k][j])n++;elsebreak;}if(m==4&&n==4){num++;b[i][j]=a[i][j];}}}}voidSaddle_point::print(){inti,j;cout数组a为:endl;for(i=0;i4;i++){for(j=0;j4;j++)couta[i][j]'\t';coutendl;}cout鞍点个数:numendl;if(num){for(i=0;i4;i++){for(j=0;j4;j++){if(b[i][j]){cout鞍点坐标:[i][j]相应值:b[i][j]endl;}}}}elsecout无鞍点endl;}voidmain(){intb[][4]={2,6,3,4,5,6,5,5,5,7,6,7,1,9,2,7};Saddle_pointfun(b);fun.process();fun.print();}四、实践小结应理解鞍点的含义,再利用循环判断语句依次遍历寻找鞍点。五、运行结果任务四7、以下程序统计一个字符串中包含某个字符的单词所出现的次数。这里假设单词之间由一个或多个空格分隔,且在判断字符是否相等时不区分大小写字母。请改正其中的错误。程序正确的运行结果为字符串“Iamastudent.MynameisTony.Iamtwenty.”中包含字符“T”的单词有3个修改后的程序下#includeiostream.hcharconvert(charc){if(c='A'&&c='Z')returnc+'a'-'A';returnc;}i
本文标题:课程实践VC++
链接地址:https://www.777doc.com/doc-4221579 .html