#include #include #include "CPstring.h" #include "vector.h" // file: getinfo2.cc // author Dietolf Ramm; date: 11/6/96 // simple info storage and retrieval system using lines of text // stored in vectors of strings // Use a struct to keep some usage statistics const string SENTINEL = "quit"; struct data { string line; int use; }; void Load(Vector & info, int & numLines) // postcondition: info contains a information from file for later search { string filename, s; cout << "Enter name of input file: "; getline(cin, filename); ifstream input; input.open(filename); while (getline(input, s)) { if (numLines >= info.Length()) { info.SetSize(2*info.Length()); cout << "vector doubled" << endl; } info[numLines].line = s; info[numLines].use = 0; numLines++; } cout << numLines << " lines read." << endl; } void Find(Vector & info, int numLines, string request) // precondtion: info contains a information from file for search // numlines contains the number of lines of data this consists of // postcondition: lines containing request as a substring are printed { int k; for (k = 0; k < numLines; k++) if ( info[k].line.Contains(request) ) { cout << info[k].line << endl; info[k].use++; } } void Report(const Vector & info, int numLines) // postcondition: lines that were referenced printed out with frequency { int k; for (k = 0; k < numLines; k++) if ( info[k].use > 0 ) { cout << "(" << info[k].use << ")" << endl; cout << info[k].line << endl; } } int main() { Vector info(50); int lines = 0; string request; Load(info, lines); cout << "Enter search string: " ; getline(cin, request); while (request != SENTINEL) { Find(info, lines, request); cout << "Enter search string: " ; getline(cin, request); } Report(info, lines); return 0; } Sample output: getinfo2 Enter name of input file: /u/dr/a./nums vector doubled vector doubled vector doubled vector doubled 644 lines read. Enter search string: Karl 688-1871 Karl Ramm, 407 Gregson St, Apt 2, Durham, NC 27701, N1XPB 660-6905 Karl Ramm, OIT, karl@oit.duke.edu 617-623-6763 Karl Ramm, 390 Broadway, Apt 25, Sommerville, Mass 02145 617-253-0129 office Karl Ramm, kcr@mit.edu /mit/is/dcns/ops/syssupport/kcr Enter search string: Gregson 688-1871 Karl Ramm, 407 Gregson St, Apt 2, Durham, NC 27701, N1XPB Enter search string: Munich [011 49] 89 343277 Sieglind Ramm, BiedersteinerStr 3, 80802 Munich Enter search string: Sieglind [011 49] 89 343277 Sieglind Ramm, BiedersteinerStr 3, 80802 Munich Enter search string: quit (2) 688-1871 Karl Ramm, 407 Gregson St, Apt 2, Durham, NC 27701, N1XPB (1) 660-6905 Karl Ramm, OIT, karl@oit.duke.edu (1) 617-623-6763 Karl Ramm, 390 Broadway, Apt 25, Sommerville, Mass 02145 (1) 617-253-0129 office Karl Ramm, kcr@mit.edu /mit/is/dcns/ops/syssupport/kcr (2) [011 49] 89 343277 Sieglind Ramm, BiedersteinerStr 3, 80802 Munich