}
程序运行输出:
Entergrade#1:
86
Entergrade#2:
98
Entergrade#3:
67
Entergrade#4:
80
Entergrade#5:
78
Entergrade#6:
95
Entergrade#7:
78
Entergrade#8:
56
Averagegrade:
79.75
6-24
设计一个字符串类MyString,具有构造函数、析构函数、拷贝构造函数,重载运算符+、=、+=、[],尽可能地完善它,使之能满足各种需要。
(运算符重载功能为选做,参见第8章)
解:
#include
#include
classMyString
{
public:
MyString();
MyString(constchar*const);
MyString(constMyString&);
~MyString();
char&operator[](unsignedshortoffset);
charoperator[](unsignedshortoffset)const;
MyStringoperator+(constMyString&);
voidoperator+=(constMyString&);
MyString&operator=(constMyString&);
unsignedshortGetLen()const{returnitsLen;}
constchar*GetMyString()const{returnitsMyString;}
private:
MyString(unsignedshort);//privateconstructor
char*itsMyString;
unsignedshortitsLen;
};
MyString:
:
MyString()
{
itsMyString=newchar[1];
itsMyString[0]='\0';
itsLen=0;
}
MyString:
:
MyString(unsignedshortlen)
{
itsMyString=newchar[len+1];
for(unsignedshorti=0;i<=len;i++)
itsMyString[i]='\0';
itsLen=len;
}
MyString:
:
MyString(constchar*constcMyString)
{
itsLen=strlen(cMyString);
itsMyString=newchar[itsLen+1];
for(unsignedshorti=0;iitsMyString[i]=cMyString[i];
itsMyString[itsLen]='\0';
}
MyString:
:
MyString(constMyString&rhs)
{
itsLen=rhs.GetLen();
itsMyString=newchar[itsLen+1];
for(unsignedshorti=0;iitsMyString[i]=rhs[i];
itsMyString[itsLen]='\0';
}
MyString:
:
~MyString()
{
delete[]itsMyString;
itsLen=0;
}
MyString&MyString:
:
operator=(constMyString&rhs)
{
if(this==&rhs)
return*this;
delete[]itsMyString;
itsLen=rhs.GetLen();
itsMyString=newchar[itsLen+1];
for(unsignedshorti=0;iitsMyString[i]=rhs[i];
itsMyString[itsLen]='\0';
return*this;
}
char&MyString:
:
operator[](unsignedshortoffset)
{
if(offset>itsLen)
returnitsMyString[itsLen-1];
else
returnitsMyString[offset];
}
charMyString:
:
operator[](unsignedshortoffset)const
{
if(offset>itsLen)
returnitsMyString[itsLen-1];
else
returnitsMyString[offset];
}
MyStringMyString:
:
operator+(constMyString&rhs)
{
unsignedshorttotalLen=itsLen+rhs.GetLen();
MyStringtemp(totalLen);
for(unsignedshorti=0;itemp[i]=itsMyString[i];
for(unsignedshortj=0;jtemp[i]=rhs[j];
temp[totalLen]='\0';
returntemp;
}
voidMyString:
:
operator+=(constMyString&rhs)
{
unsignedshortrhsLen=rhs.GetLen();
unsignedshorttotalLen=itsLen+rhsLen;
MyStringtemp(totalLen);
for(unsignedshorti=0;itemp[i]=itsMyString[i];
for(unsignedshortj=0;jtemp[i]=rhs[i-itsLen];
temp[totalLen]='\0';
*this=temp;
}
intmain()
{
MyStrings1("initialtest");
cout<<"S1:
\t"<char*temp="HelloWorld";
s1=temp;
cout<<"S1:
\t"<chartempTwo[20];
strcpy(tempTwo,";nicetobehere!
");
s1+=tempTwo;
cout<<"tempTwo:
\t"<cout<<"S1:
\t"<cout<<"S1[4]:
\t"<s1[4]='x';
cout<<"S1:
\t"<cout<<"S1[999]:
\t"<MyStrings2("AnothermyString");
MyStrings3;
s3=s1+s2;
cout<<"S3:
\t"<MyStrings4;
s4="Whydoesthiswork?
";
cout<<"S4:
\t"<return0;
}
程序运行输出:
S1:
initialtest
S1:
HelloWorld
tempTwo:
;nicetobehere!
S1:
HelloWorld;nicetobehere!
S1[4]:
o
S1:
HellxWorld;nicetobehere!
S1[999]:
!
S3:
HellxWorld;nicetobehere!
AnothermyString
S4:
Whydoesthiswork?
6-25编写一个3×3矩阵转置的函数,在main()函数中输入数据。
解:
#include
voidmove(intmatrix[3][3])
{
inti,j,k;
for(i=0;i<3;i++)
for(j=0;j
{
k=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=k;
}
}
voidmain()
{
inti,j;
intdata[3][3];
cout<<"输入矩阵的元素"<for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
cout<<"第"<
<<"个元素为:
";
cin>>data[i][j];
}
cout<<"输入的矩阵的为:
"<for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<cout<}
move(data);
cout<<"转置后的矩阵的为:
"<for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<cout<}
}
程序运行输出:
输入矩阵的元素
第1行第1个元素为:
1
第1行第2个元素为:
2
第1行第3个元素为:
3
第2行第1个元素为:
4
第2行第2个元素为:
5
第2行第3个元素为:
6
第3行第1个元素为:
7
第3行第2个元素为:
8
第3行第3个元素为:
9
输入的矩阵的为:
123
456
789
转置后的矩阵的为:
147
258
369
6-26编写一个矩阵转置的函数,矩阵的维数在程序中由用户输入。
解:
#include
voidmove(int*matrix,intn)
{
inti,j,k;
for(i=0;ifor(j=0;j
{
k=*(matrix+i*n+j);
*(matrix+i*n+j)=*(matrix+j*n+i);