C++实验报告0623052253.docx
- 文档编号:102282
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:25
- 大小:31.17KB
C++实验报告0623052253.docx
《C++实验报告0623052253.docx》由会员分享,可在线阅读,更多相关《C++实验报告0623052253.docx(25页珍藏版)》请在冰点文库上搜索。
C++实验报告0623052253
C++课程实验报告
1340601119林子扬
1•试定义一个类STR,实现求两个字符串的交集。
两个字符串的交集是指同时属于两个字符
串的字符的集合,且该集合中的字符各不相同。
具体要求如下:
(1)私有数据成员:
chars1[50],s2[50],s0[50];字符串s0用于存放字符串s1和字符串s2的交集。
(2)公有成员函数:
•STR(char*p1,char*p2);构造函数,分别用参数p1和p2初始化成员数组s1和s2。
•intisin(char*p,charc);判断字符c是否出现在字符串p中,如果是,则返回值为
1,否则返回0。
•voidfun();求成员数组s1和s2的交集,并将结果存放在成员数组s0中。
提示:
利用函数isin(char*,char)依次判断一个字符串中的每个字符是否包含于另一个字符串中,如
果包含,且该字符不包含于成员数组s0中,则将该字符加入到成员数组s0中。
•voidprint();按输出示例的格式输出所有数据成员。
(3)在主函数中对该类进行测试。
输出示例:
字符串1:
abcdef123abc12
字符串2:
acef123ace124
两个字符串的交集:
acef123
源程序代码:
#include
#include
classSTR{
chars0[50],s1[50],s2[50];
public:
STR(char*p1,char*p2);
intisin(char*p,charc);
voidfun();voidprint();
};
STR:
:
STR(char*p1,char*p2)
{
strcpy(s1,p1);
strcpy(s2,p2);
s0[0]='\0';
}
intSTR:
:
isin(char*p,charc)
{
char*p0=p;
while(*p0)
{
if(*p0++==c)return1;//后置自增参与后指向下一位}
return0;
}
voidSTR:
:
fun()
{
char*pO=sO,*p1=s1;
while(*p1){
if(isin(s2,*p1)&&(!
isin(s0,*p1)))
{
*pO++=*p1;
}
*p0='\0:
p1++;
}
/*for(char*p1=s1,*pO=sO;*p1;p1++){
if(isin(s2,*p1)&&(!
isin(:
sO,*p1)))
*pO++=*p1;
*p0='\0:
}*/
}
voidSTR:
:
print()
{
cout<<"字符串1:
"< cout<<"字符串2: "< cout<<"两个字符的交集: "< } voidmain() { charstr1[]="abcdef123abc12"; charstr2[]="acef123ace124"; STRt(str1,str2); t.fun(); t.print(); } 运行结果: 贰"F: \lirtc4-Debug\0001.exe" 字符abcdefl23ahcl2字特禹2: aceF123acel24商个学符的acefl23 Pressanytocontinue 2•试定义一个类Array,实现由一个数组派生出另一个数组。 派生规则如下: 新数组的元素取值为原数组中相同位置元素的左、右两个相邻元素前后拼接后形成的整数(左邻元素在前,右邻元素在后)。 规定最左(右)列元素的左(右)邻元素为该元素所在行的最右(左)侧的元素。 具体要求如下: (1)私有数据成员: •inta[3][4];原数组。 •intb[3][4];派生数组。 (2)公有成员函数 •Array(intt[][4],intn);构造函数,利用参数t的前n行元素初始化数据成员a。 •intnn(intt1,intt2);返回t1,t2拼接后形成的整数(t1在前,t2在后)。 •voidfun();按题意生成新数组,并将结果存放到数据成员b中。 •voidprint();按矩阵形式输出成员数组。 (3)在主函数中对该类进行测试。 输出示例: 原数组: 41 67 34 0 69 24 78 58 62 64 5 45 派生数组: 67 4134 670 3441 5824 6978 2458 7869 4564 625 6445 562 源程序代码: #includeviostream.h>#include public: Array(intt[][4],intn);intnn(intt1,intt2);voidfun(); voidprint(); }; Array: : Array(intt[][4],intn){ for(inti=0;ivn;i++)for(intj=0;j<4;j++)a[i][j]=t[i][j]; } intArray: : nn(intt1,intt2) { intt=t2;while(t){ t1*=10; t/=10; } returnt1+t2; } voidArray: : fun() { for(inti=0;i<3;i++) for(intj=0;j<4;j++){ intc=j-1; intd=j+1; c=c<0? 3: c; d=d>3? 0: d; b[i][j]=nn(a[i][c],a[i][d]);〃56 } } voidArray: : print() { coutvv"原数组: "vvendl; for(inti=0;i<3;i++){ for(intj=0;j<4;j++){coutvva[i][j]vv'\t';}coutvvendl; } coutvv"派生数组: "vvendl; for(i=0;iv3;i++){ for(intj=0;jv4;j++){coutvvb[i][j]vv'\t'; }coutvvendl; } } voidmain() { intt[3][4]={41,67,34,0,69,24,78,58,62,64,5,45}; Arraysz(t,4); sz.fun(); sz.print(); }运行结果: •F: \lin数袒派生盈DebugVJOOZexh 11 6? 34 Q 24 78 58 >2 64 5 45 底生数组= >7 4134 67 3441 >824 6? 78 2458 7869 625 644B 562 *res£ NnyMy tocontinue 3•试定义一个类NUM,实现将一维数组中各整数元素去掉其中相同数字后再对数组从小 到大排序。 将一个整数去掉相同数字是指: 如果一个整数中有相同的数字,则保留从左 数起 ,第一次看到的那个数字,而将其他相同的数字去掉。 例如: 数字12324151中有三个1、 两个2,则去掉相同的数字后变为12345。 具体要求如下: (1)私有数据成员。 •inta[5]: 存放需处理的数组。 (2)公有成员函数。 •NUM(intt[],intn): 构造函数,用t初始化a,n为t的元素个数。 •voidsort(intt[],intn): 将数组t的元素从小到大排序。 •intconvert(intn): 去除n中相同的数字并返回新得到的数。 •voidfun(): 将数组a的各元素去除相同的数字后从小到大排列。 要求调用函 数 convert。 禾口sort()。 •voidprint(): 输出数组a的所有元素。 (3)在主函数中对该类进行测试。 输入/输出示例(下划线部分为键盘输入): 输入5个整数: 121365666223131231434435 处理前的数组为: 121365666223131231434435 处理后的数组为: 651232313451234 源程序代码: #include classNUM { inta[5]; public: NUM(intt[],intn); voidsort(); intconvert(intn); voidfun(); voidprint(); }; NUM: : NUM(intt[],intn)//30 { for(inti=0;i a[i]=t[i]; } voidNUM: : sort() { inti,j,k,t; for(i=0;i<4;i++) { k=i; for(j=i+1;j<5;j++)//40if(a[j] k=j; if(k! =i) {t=a[k];a[k]=a[i];a[i]=t;} } } intNUM: : convert(intn) { /*ints[5],i,j,k; for(i=4;i>0;i--) { k=n; s[i]=k%10; n/=10 } for(i=0;i<5;i++) for(j=i+1;j<5;j++)if(a[i]==[j]) {for(k=j;k<4;k++)a[k]=a[k+1]; }*/ ints[5],i=4,j,k=0,t,b,c=0; while(n){ s[i--]=n%10; n/=10; } for(j=i+1;j<4-k;j++) { t=j+1; while(t<5-k) if(s[j]==s[t]){ for(b=t;b<4-k;b++)s[b]=s[b+1];k++; } elset++; } for(j=i+1;j<5-k;j++){c=c*10+s[j];} returnc; } voidNUM: : fun() { for(inti=0;i<5;i++)a[i]=convert(a[i]); sort(); } voidNUM: : print() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实验 报告 0623052253