C++primer plus第六版课后编程题答案17.5

来源:互联网 发布:2016年淘宝卖什么好 编辑:程序博客网 时间:2024/05/31 04:04

main175.cpp

不知道为什么,文件追加不成功,都是只能更新,知道的麻烦告诉下我

#include <iostream>#include <set>#include <algorithm>#include <string>#include <iterator>#include <fstream>#include <cctype>using namespace std;//由题知道,键值唯一,可以知道,应该用setstatic void output(string str){cout<<str<<"  ";};static bool check(ifstream &fcheck,string &str)//检测文件中是否已经存在该名字{string checkstr;int flag; //int sizestr;int sizecheck;sizestr=str.length();while(fcheck.good()){//getline(fcheck,checkstr);//多1个长度//getline(fcheck,checkstr,'\n');//多1个长度fcheck>>checkstr;//这样才保证长度正确,应该是因为输入的时候用的是cin>>sizecheck=checkstr.length();//这里的为什么会多1个长度,getline?flag=str.compare(checkstr);//(str==checkstr);//为何总返回-1??if(flag==0)//忘记了str的是地址,不能直接比较,比较的是地址!!return true;}if(fcheck.eof())return false;};static bool writeToSet(ifstream &fwrite,set<string> &s){string str;while(fwrite.good()){//getline(fwrite,str);//不要用这个,会把文件最后一个换行读进去fwrite>>str;s.insert(str);}if(fwrite.eof())return true;elsereturn false;}/*static bool input(ofstream &fout,const char *filename){ifstream fcheck;string temp;cout<<"plesase enter your friends name(q to quit):";cin>>temp;while(temp!="q"){//Mat.insert(Mat.begin(),temp);fcheck.open(filename,ios_base::binary);//流重定位if(check(fcheck,temp))//如果已经存在{cout<<"\nYou had already writer it!Enter others name:"<<endl;}else//否则写入{fout<<temp;fout<<endl;cout<<"\nwrite success!"<<endl;}fout.flush();//刷新流,写入fcheck.close();cout<<"\nMat ,plesase enter your friends name continue(q to quit):";cin>>temp;}while(cin.get()!='\n')continue;return true;}*/static bool save(set<string> &s){//ofstream fout("All.dat",ios_base::binary||ios_base::app);//追加模式//为何不是直接在文件尾部追加呢?ofstream fout("All.dat",ios_base::ate||ios_base::app);if(!fout.is_open()){cout<<"Open All.dat error!"<<endl;return false;}set<string>::iterator it;for(it=s.begin();it!=s.end();++it){fout<<*it;//fout<<"  ";fout<<endl;//<<忽略end??fout.flush();}fout.close();return true;}void main175(){ofstream foutM("Mat.dat",ios_base::binary||ios_base::app);//追加模式ofstream foutP("Pat.dat",ios_base::binary||ios_base::app);//需文件已存在,否则无法以追加打开ifstream fcheck;ifstream fwrite;if(!foutM.is_open())cout<<" Mat.dat open failure!"<<endl;if(!foutP.is_open())cout<<" Pat.dat open failure!"<<endl;//input(foutM,"Mat.dat");//初始化Mat.dat文件string temp;cout<<"Mat ,plesase enter your friends name(q to quit):";cin>>temp;while(temp!="q"){//Mat.insert(Mat.begin(),temp);fcheck.open("Mat.dat",ios_base::binary);//流重定位if(check(fcheck,temp))//如果已经存在{cout<<"\nYou had already writer it!Enter others name:"<<endl;}else//否则写入{foutM<<temp;foutM<<endl;cout<<"\nwrite success!"<<endl;}foutM.flush();//刷新流,写入fcheck.close();cout<<"\nMat ,plesase enter your friends name continue(q to quit):";cin>>temp;}while(cin.get()!='\n')continue;set<string> Mat;set<string> Pat;fwrite.open("Mat.dat",ios_base::binary);if(writeToSet(fwrite,Mat))cout<<"\nwrite to Mat success!"<<endl;elsecout<<"Something wrong!"<<endl;fwrite.close();cout<<"Mat's friend list: ";for_each(Mat.begin(),Mat.end(),output);//Pat.datcout<<"\nNow ,Pat ,please enter your friend's name:";cin>>temp;while(temp!="q"){//Mat.insert(Mat.begin(),temp);fcheck.open("Pat.dat",ios_base::binary);//流重定位if(check(fcheck,temp))//如果已经存在{cout<<"\nYou had already writer it!Enter others name:"<<endl;}else//否则写入{foutP<<temp;foutP<<endl;cout<<"\nwrite success!"<<endl;}foutP.flush();//刷新流,写入fcheck.close();cout<<"\nMat ,plesase enter your friends name continue(q to quit):";cin>>temp;}while(cin.get()!='\n')continue;fwrite.open("Pat.dat",ios_base::binary);if(writeToSet(fwrite,Pat))cout<<"\nwrite to Pat success!"<<endl;elsecout<<"Something wrong!"<<endl;fwrite.close();cout<<"Pat's friend list: ";for_each(Pat.begin(),Pat.end(),output);set<string> All;//transform(Mat.begin(),Mat.end(),All.begin(),[](set<string>::iterator it){return it;});////set_union(Mat.begin(),Mat.end(),Pat.begin(),Pat.end(),All.begin());//用set_unionset_union(Mat.begin(),Mat.end(),Pat.begin(),Pat.end(),insert_iterator<set<string> >(All,All.begin()));//p703cout<<"\nAll list:";for_each(All.begin(),All.end(),output);cout<<endl;if(save(All))cout<<"Save perfer!"<<endl;cin.get();cin.get();}


0 0
原创粉丝点击