Advertisement
Guest User

Untitled

a guest
Feb 1st, 2012
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <string>
  5. #include <fstream>
  6. #include <algorithm>
  7. using namespace std;
  8. typedef map<string, vector<string> > mapa;
  9.  
  10. int vypis_zaznamy(string priezvisko, mapa& zoznam) {
  11.     //nic sa nenaslo
  12.     if (zoznam.find(priezvisko) == zoznam.end())
  13.         return 0;
  14.  
  15.     int num = 0;
  16.     //cout << "najdene zaznamy s priezviskom " << priezvisko << endl;
  17.     for (vector<string>::iterator iter = zoznam[priezvisko].begin(); iter != zoznam[priezvisko].end(); ++iter) {
  18.         cout << *iter << endl;
  19.         ++num;
  20.     }
  21.     return num;
  22. }
  23. void prehladaj(string prefix, string suffix, mapa& zoznam) {
  24.     //cout << prefix+'*'+suffix << endl;
  25.  
  26.     //som OK?
  27.     vypis_zaznamy(prefix+suffix, zoznam);
  28.  
  29.     string abeceda = "abcdefghijklmnopqrstuvwxyz";
  30.     if (prefix.size()==0) { // prve pismeno ma velku abecedu
  31.         transform(abeceda.begin(), abeceda.end(), abeceda.begin(), ::toupper);
  32.     }
  33.    
  34.     // ma zmysel hladat dalej?
  35.     if (zoznam.upper_bound(prefix+abeceda[0]) == zoznam.lower_bound(prefix+abeceda[abeceda.size()-1]))
  36.     { // ziaden element v rozsahu neexistuje
  37.         vypis_zaznamy(prefix+abeceda[0]+suffix, zoznam);
  38.         vypis_zaznamy(prefix+abeceda[abeceda.size()-1]+suffix, zoznam);
  39.         return;
  40.     }
  41.     //if(prefix.size()+suffix.size()+1 > 16) return;
  42.  
  43.     for (string::iterator iter = abeceda.begin(); iter != abeceda.end(); ++iter) {
  44.         //vypis_zaznamy(prefix+(*iter)+suffix, zoznam);
  45.         prehladaj(prefix+(*iter), suffix, zoznam);
  46.     }
  47. }
  48. int main() {
  49.  
  50.     mapa zoznam;
  51.    
  52.     ifstream vstup("D:/vstup2.txt");
  53.     vector<string> celemeno;
  54.  
  55.     while (vstup.peek() != -1) { // prejde jeden riadok
  56.         // add
  57.         if (vstup.peek() == 'q') { cout << "Nasledanou" << endl; break; }
  58.         if (vstup.peek() == 'a' || vstup.peek() == 'd') {
  59.             bool isAdd = vstup.get() == 'a';
  60.  
  61.             string priezvisko;
  62.             string celemeno;
  63.  
  64.             vstup.ignore(); // medzera
  65.             // krstne meno
  66.             while (vstup.peek() != ' ') {
  67.                 char c = (char) vstup.get();
  68.                 celemeno +=c;
  69.             }
  70.             celemeno += vstup.get(); // medzera
  71.  
  72.             // priezvisko
  73.             while (vstup.peek() != ' ') {
  74.                 char c = (char) vstup.get();
  75.                 celemeno +=c;
  76.                 priezvisko +=c;
  77.             }
  78.             celemeno +=vstup.get();
  79.  
  80.             // telefonne cislo
  81.             while (vstup.peek() != '\n') {
  82.                 char c = (char) vstup.get();
  83.                 celemeno +=c;
  84.             }
  85.             vstup.ignore(); // nacita \n
  86.             //cout << celemeno << priezvisko << endl;
  87.  
  88.             // nacitane, idem spracovat do mapy
  89.             if (isAdd) { // pridam
  90.                 bool naslo = false;
  91.                 for (vector<string>::iterator iter = zoznam[priezvisko].begin(); iter != zoznam[priezvisko].end(); ++iter) {
  92.                     if (*iter == celemeno) {
  93.                         naslo = true;
  94.                         break;
  95.                     }  
  96.                 }
  97.                 if (!naslo)
  98.                     zoznam[priezvisko].push_back(celemeno);
  99.             } else { // delete
  100.                 for (vector<string>::iterator iter = zoznam[priezvisko].begin(); iter != zoznam[priezvisko].end(); ++iter) {
  101.                     if (*iter == celemeno) {
  102.                         zoznam[priezvisko].erase(iter);
  103.                         break;
  104.                     }  
  105.                 }
  106.             }
  107.         }
  108.         if (vstup.peek() == '?') {
  109.             string prefix, suffix;
  110.             bool plnimprefix = true;
  111.             vstup.ignore(); // otaznik
  112.             vstup.ignore(); // medzera
  113.             while (vstup.peek() != '\n') {
  114.                 char c = vstup.get();
  115.                 if (c == '*') {
  116.                     plnimprefix = false;
  117.                 } else {
  118.                     if (plnimprefix)
  119.                         prefix +=c;
  120.                     else
  121.                         suffix +=c;
  122.                 }
  123.             }
  124.             if (plnimprefix) // neplnil som suffix
  125.                 vypis_zaznamy(prefix, zoznam);
  126.             else { // tvorim vsetky mozne veci
  127.                 //cout << "pppp" << endl;
  128.                 prehladaj(prefix, suffix, zoznam);
  129.             }
  130.             vstup.ignore();
  131.         }
  132.  
  133.     }
  134.  
  135.     system("pause");
  136.     return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement