Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <vector>
- #include <string>
- #include <fstream>
- #include <algorithm>
- using namespace std;
- typedef map<string, vector<string> > mapa;
- int vypis_zaznamy(string priezvisko, mapa& zoznam) {
- //nic sa nenaslo
- if (zoznam.find(priezvisko) == zoznam.end())
- return 0;
- int num = 0;
- //cout << "najdene zaznamy s priezviskom " << priezvisko << endl;
- for (vector<string>::iterator iter = zoznam[priezvisko].begin(); iter != zoznam[priezvisko].end(); ++iter) {
- cout << *iter << endl;
- ++num;
- }
- return num;
- }
- void prehladaj(string prefix, string suffix, mapa& zoznam) {
- //cout << prefix+'*'+suffix << endl;
- //som OK?
- vypis_zaznamy(prefix+suffix, zoznam);
- string abeceda = "abcdefghijklmnopqrstuvwxyz";
- if (prefix.size()==0) { // prve pismeno ma velku abecedu
- transform(abeceda.begin(), abeceda.end(), abeceda.begin(), ::toupper);
- }
- // ma zmysel hladat dalej?
- if (zoznam.upper_bound(prefix+abeceda[0]) == zoznam.lower_bound(prefix+abeceda[abeceda.size()-1]))
- { // ziaden element v rozsahu neexistuje
- vypis_zaznamy(prefix+abeceda[0]+suffix, zoznam);
- vypis_zaznamy(prefix+abeceda[abeceda.size()-1]+suffix, zoznam);
- return;
- }
- //if(prefix.size()+suffix.size()+1 > 16) return;
- for (string::iterator iter = abeceda.begin(); iter != abeceda.end(); ++iter) {
- //vypis_zaznamy(prefix+(*iter)+suffix, zoznam);
- prehladaj(prefix+(*iter), suffix, zoznam);
- }
- }
- int main() {
- mapa zoznam;
- ifstream vstup("D:/vstup2.txt");
- vector<string> celemeno;
- while (vstup.peek() != -1) { // prejde jeden riadok
- // add
- if (vstup.peek() == 'q') { cout << "Nasledanou" << endl; break; }
- if (vstup.peek() == 'a' || vstup.peek() == 'd') {
- bool isAdd = vstup.get() == 'a';
- string priezvisko;
- string celemeno;
- vstup.ignore(); // medzera
- // krstne meno
- while (vstup.peek() != ' ') {
- char c = (char) vstup.get();
- celemeno +=c;
- }
- celemeno += vstup.get(); // medzera
- // priezvisko
- while (vstup.peek() != ' ') {
- char c = (char) vstup.get();
- celemeno +=c;
- priezvisko +=c;
- }
- celemeno +=vstup.get();
- // telefonne cislo
- while (vstup.peek() != '\n') {
- char c = (char) vstup.get();
- celemeno +=c;
- }
- vstup.ignore(); // nacita \n
- //cout << celemeno << priezvisko << endl;
- // nacitane, idem spracovat do mapy
- if (isAdd) { // pridam
- bool naslo = false;
- for (vector<string>::iterator iter = zoznam[priezvisko].begin(); iter != zoznam[priezvisko].end(); ++iter) {
- if (*iter == celemeno) {
- naslo = true;
- break;
- }
- }
- if (!naslo)
- zoznam[priezvisko].push_back(celemeno);
- } else { // delete
- for (vector<string>::iterator iter = zoznam[priezvisko].begin(); iter != zoznam[priezvisko].end(); ++iter) {
- if (*iter == celemeno) {
- zoznam[priezvisko].erase(iter);
- break;
- }
- }
- }
- }
- if (vstup.peek() == '?') {
- string prefix, suffix;
- bool plnimprefix = true;
- vstup.ignore(); // otaznik
- vstup.ignore(); // medzera
- while (vstup.peek() != '\n') {
- char c = vstup.get();
- if (c == '*') {
- plnimprefix = false;
- } else {
- if (plnimprefix)
- prefix +=c;
- else
- suffix +=c;
- }
- }
- if (plnimprefix) // neplnil som suffix
- vypis_zaznamy(prefix, zoznam);
- else { // tvorim vsetky mozne veci
- //cout << "pppp" << endl;
- prehladaj(prefix, suffix, zoznam);
- }
- vstup.ignore();
- }
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement