③();
return0;
}
3、重载运算符“〈<"与“〉〉”,使其能够输入一件商品的信息与输出这件商品的信息。
商品的信息由编号、商品名与价格、假如商品类Merchandise的框架如下:
classmerchandise{
public:
Merchandiss();
~Merchandiss();
friendistream& operator>〉(istream&in,Merchandiss&s);
friendostream&operator〈〈(ostream&out,Merchandiss&s);
private:
int no;
char*name;
double price;
};
要求实现该类,并编写以下的main函数对该类进行操作。
intmain()
{Merchandisemer;
cin〉>mer;
cout<〈mer;
return0;
}
程序代码:
#include〈iostream〉
#include〈string>
using namespacestd;
classMerchandise{
public:
Merchandise(int n=0,charna='a’,doublep=0、0)
{
ﻩno=n;
name=na;
ﻩprice=p;
}
~Merchandise(){}
friendostream& operator<<(ostream& out,Merchandise&s)
{
ﻩcout〈<”编号:
"<〈s、no<〈endl;
ﻩcout<<"名称:
"<〈s、name<〈endl;
ﻩcout<〈”价格:
”〈
returnout;
}
friendistream&operator〉>(istream&in,Merchandise& s)
{
ﻩcout〈〈”编号:
”;
ﻩcin>>s、no;
cout<<”名称:
”;
ﻩcin〉〉s、name;
ﻩcout〈〈"价格:
";
ﻩcin〉〉s、price;
ﻩreturnin;
}
private:
intno;
charname;
doubleprice;
};
int main()
{
ﻩMerchandisemer;
ﻩcout〈〈”输入商品信息:
"〈〈endl;
ﻩcin>>mer;
ﻩcout〈〈"输出商品信息:
”〈〈endl;
ﻩcout〈<mer;
return0;
}
运行结果:
4、编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来、
程序代码:
#include〈iostream〉
#include<fstream>
#include〈string〉
usingnamespacestd;
int main()
{ofstreamfout1("f1、txt",ios:
:
out);
if(!
fout1)
{ cout<<"f1、txt canntopen、\n”;
exit
(1);
}
fout1〈〈"Thisis a”;
ofstream fout2(”f2、txt”,ios:
:
out);
if(!
fout2)
{cout<〈"f2、txtcanntopen、\n”;
exit
(1);
}
fout2<〈”program";
fout1、close();
fout2、close();
ifstreamfin2("f2、txt”,ios:
:
in);
ofstreamfout3(”f1、txt",ios:
:
app);
stringstr;
while (fin2〉〉str)
{fout3<<str;
}
fin2、close();
fout3、close();
ifstreamfin1("f1、txt”,ios:
:
in);
if(!
fin1)
{cout<〈”f1、txtcanntopen、\n”;
exit(1);
}
char ch;
while(!
fin1、eof())
{
fin1、get(ch);
if(ch>=’a'&&ch〈='z')
{ ch=ch—32;
}
cout〈<ch;
}
cout〈<endl;
fin1、close();
return0;
}
运行结果:
5、将一个源文件复制为两个不同名目的文件,源文件与目的文件均用构造函数打开,使用成员函数get与put复制第一个目的文件,使用getline与插入运算符复制第二个目的文件、(提示:
用get函数将输入文件流对象的指针指向文件尾后,无法将该指针移到文件首位置、因此只能定义两个输入文件流对象打开同一源文件,用于两种方式的文件复制。
)
实验数据:
源文件:
e:
\ex\a、txt,文件内容为soucefile
目的文件1:
e:
\ex\b、txt
目的文件2:
e:
\ex\c、txt
程序代码:
#include〈iostream〉
#include〈fstream>
#include〈string〉
using namespace std;
void
createfile()
{
ofstream outfile("a、txt");
if(!
outfile)
{
cerr<<”opena、txterror!
”<〈endl;
exit(1);
}
char str[100];
cin、getline(str,100,’\n’);
outfile〈〈str;
out();
}
void
copyfile_b()
{
ofstreamoutfile(”b、txt");
if(!
outfile)
{
cerr〈〈"openb、txterror!
”<<endl;
exit(1);
}
ifstreaminfile("a、txt");
if(!
infile)
{
cerr<<”open a、txt error!
”<〈endl;
exit
(1);
}
charch;
while
(in(ch))
{
outfile<}
out();
in();
}
void
copyfile_c()
{
ofstreamoutfile("c、txt”);
if
(!
outfile)
{
cerr<〈"openc、txterror!
"<〈endl;
exit
(1);
}
ifstreaminfile(”a、txt”);
if(!
infile)
{
cerr<〈”open a、txterror!
"〈exit
(1);
}
char ch;
while
(in(ch))
{
outfile〈〈ch;
}
out();
in();
}
voiddisplay(char*)
{
ifstreamin);
if(!
infile)
{
cerr〈<"openthe!
"<<endl;
exit
(1);
}
charch;
while
(in(ch))
{
cout、put(ch);
}
cout<〈endl;
in();
}
int
main()
{
createfile();
copyfile_b();
copyfile_c();
cout〈〈”a文件t中D的内容为:
”;
display(”a、txt”);
cout〈〈"b文件t中D的内容为:
”;
display(”b、txt”);
cout<〈"c文件t中D的内容为:
";
display(”c、txt”);
return 0;
}
运行结果:
6、 将存放在源文件(e:
\ex\array1、txt)中学生成绩读入二维整型数组a[3][5]中,数组a的第0列存放学号,第4列存放平均成绩、计算出每个学生的平均成绩,用擂台法对数组a按平均成绩升序排序后,存放在目的文件(e:
\ex\array2、txt)中。
学生的学号与成绩如实验数据所示、编写程序实现上述要求、
实验数据:
源文件:
e:
\ex\array1、txt,内容如下:
100190 8580 ﻩ0
10028070ﻩ60ﻩﻩ0
1003ﻩ8580ﻩﻩ75ﻩ0
目的文件:
e:
\ex\array2、txt
程序代码:
#include〈iostream〉
#include〈fstream〉
usingnamespace std;
void
createfile()
{
ofstreamoutfile(”array1、txt”);
inta[3][4];
inti,j;
for
(i=0;i<3;i++)
{
cout〈<”请输入第”〈〈i+1<〈”个学生的信息:
";
for
(j=0;j<4;j++)
{
cin>〉a[i][j];
}
}
ﻩfor
(i=0;i<3;i++)
{
for
(j=0;j<4;j++)
{
outfile<〈a[i][j];
outfile<<' ’;
}
outfile〈〈’\n';
}
}//tarray1
void sort() //排序并创建文件tarray2
{
ifstreaminfile("array1、txt”);
inta[3][5];
inti,j,t;
double
s=0;
for
(i=0;i<3;i++)
{
for
(j=0;j<4;j++)
{
infile〉>a[i][j];
s=s+a[i][j];
}
s=(s—a[i][0])/3;
a[i][4]=s;
s=0;
}
for
(j=0;j〈2;j++)
{
for
(i=0;i<2—j;i++)
{
if
(a[i][4]>a[i+1][4])
{
for
(t=0;t〈5;t++)
{
s=a[i][t];
a[i][t]=a[i+1][t];
a[i+1][t]=s;
}
}
}
}
ofstreamoutfile(”array2、txt");
if
(!
outfile)
{
cerr<〈”open !
”;
exit
(1);
}
for
(i=0;i<3;i++)
{
for
(j=0;j〈5;j++)
{
outfile<<a[i][j];
outfile<<'’;
}
outfile<〈’\n';
}
}
voiddisplay_*)
{
ifstreamin);
if(!
infile)
{
cerr<〈"open!
"〈<endl;
exit
(1);
}
inta[3][5];
int i,j;
for
(i=0;i〈3;i++)
{
for
(j=0;j<5;j++)
{
infile>>a[i][j];
cout<}
cout<〈endl;
}
cout<〈endl;
}
int
main()
{
createfile();
sort();
display_file("array2、txt");
return0;
}
运行结果:
三、结论
通过本次实验,我掌握C++格式化的输入输出方法,还掌握重载运算符“〈<"与“〉〉”的方法,掌握磁盘文件的输入输出方法。