小迪崽 简·依
hmd
关注数: 2 粉丝数: 10,058 发帖数: 16,774 关注贴吧数: 69
求教 闹心 错误据说是这个std::ios_base::ios_base(const std::ios_base&)is private 代码//textquery.h #ifndef TEXTQUERY_H #define TEXTQUERY_H #include <string> #include <sstream> #include <fstream> #include <iostream> #include <vector> #include <map> #include <set> using namespace std; class TextQuery{ public: typedef vector<string>::size_type line_no; void ReadFile(ifstream &is); set<line_no> RunQuery(const string &queryWord) const; string TextLine(line_no) const; private: vector<string> LinesOfText; map< string, set<line_no> > WordMap; void StoreFile(ifstream &); void BuildMap(); }; void TextQuery::ReadFile(ifstream &is) { StoreFile(is); BuildMap(); } void TextQuery::StoreFile(ifstream &is) { string textLine; while(getline(is, textLine)) LinesOfText.push_back(textLine); } void TextQuery::BuildMap() { for(line_no lineNum = 0; lineNum != LinesOfText.size(); ++lineNum) { istringstream line(LinesOfText[lineNum]); string word; while(line >> word) WordMap[word].insert(lineNum); }} set<TextQuery::line_no> TextQuery::RunQuery(const string &queryWord) const { map< string, set<line_no> >::const_iterator loc = WordMap.find(queryWord); if(loc == WordMap.end()) return set<TextQuery::line_no>(); else return loc->second; } string TextQuery::TextLine(line_no line) const { if(line < LinesOfText.size()) return LinesOfText[line]; } #endif // TEXTQUERY_H //main.cpp #include "textquery.h" #include <cstdlib> void print_results(const set<vector<string>::size_type> &locs, const string &sought, const TextQuery &file); ifstream open_file(ifstream &in, const string &file); string make_plural(size_t ctr, const string &word, const string &ending); int main(int argc, char **argv) { ifstream infile; if(argc < 2 || !open_file(infile, argv[1])) { cerr << "no input file!" << endl; return EXIT_FAILURE; } TextQuery tq; tq.ReadFile(infile); while(true) { cout << "enter word to look for, or q to quit: "; string s; cin >> s; if(!cin || s == "q") break; set<vector<string>::size_type> locs = tq.RunQuery(s); print_results(locs, s, tq); } return 0; } string make_plural(size_t ctr, const string &word, const string &ending) { return (ctr == 1) ? word : word + ending;} ifstream open_file(ifstream &in, const string &file) { in.close(); in.clear(); in.open(file.c_str()); return in; } void print_results(const set<vector<string>::size_type> &locs, const string &sought, const TextQuery &file) { typedef set<TextQuery::line_no> line_nums; line_nums::size_type size = locs.size(); cout << "\n" << sought << " occurs " << size << " " << make_plural(size, "time", "s") << endl; line_nums::const_iterator it = locs.begin(); for(; it != locs.end(); ++it) cout << "\t(line " << (*it) + 1 << ") " << file.TextLine(*it) << endl; }
首页 1 2 3 下一页