问题:
解答:
#include <iostream>#include <vector>#include <string>#include <fstream>#include <algorithm>using namespace std;const int LIMIT = 50;void ShowStr(const string& str);void GetStrs(ifstream& fin, vector<string>& v);class Store{private:string str;ofstream* fout;public:Store(ofstream&out):fout(&out){}bool operator()(const string& str);~Store(){}};void ShowStr(const string& str){cout << str << endl;}void GetStrs(ifstream& fin, vector<string>& v){unsigned int len;char* p;while (fin.read((char*)&len, sizeof len)){p = new char[len];fin.read(p,len);v.push_back(p);}}bool Store::operator()(const string& str){unsigned int len = str.length();if (fout->is_open()){fout->write((char*)&len, sizeof len);fout->write(str.data(), len);return true;}else{return false;}}int main(){vector<string> vostr;string temp;cout << "Enter strings (empty line to quit):\n";while (getline(cin, temp) && temp[0] != '\0')vostr.push_back(temp);cout << "Here is your input.\n";for_each(vostr.begin(), vostr.end(),ShowStr);ofstream fout("strings.txt", ios_base::in | ios_base::binary);for_each(vostr.begin(), vostr.end(), Store(fout));fout.close();vector<string>vistr;ifstream fin("strings.txt", ios_base::in | ios_base::binary);if (!fin.is_open()){cerr << "Could not open the file for input.\n";exit(EXIT_FAILURE);}GetStrs(fin, vistr);cout << "\nHere are the strings read from the file:\n";for_each(vistr.begin(), vistr.end(), ShowStr);return 0;}
拜了个拜!