Simulate browser with a stack





1
Date Submitted Thu. Dec. 20th, 2007 2:55 PM
Revision 1 of 1
Helper eldaniel
Tags "cpluscplus" | "stack"
Comments 0 comments
Simulate browser with a stack

#include <iostream>
#include <stack>
#include <string>

using namespace std;

void visit(stack <string> &a, stack <string> &b, stack <string> &f, string url);
void back(stack <string> &a, stack <string> &b, stack <string> &f);
void forward(stack <string> &a, stack <string> &b, stack <string> &f);
void quit(stack <string> a);

int main(){
    stack <string> a, b, f;

    string url, tempURL;
    string actual ("http://informatica.utem.cl");

    /* pagina por defecto */
    a.push(actual);

    /*
    ################################################
    Cargar paginas sin la intervencion del usuario
    ################################################

    string url1 ("http://informatica.utem.cl/escuela");
    string url2 ("http://www.informatica.utem.cl/~mcast");
    string url3 ("http://www.utem.cl");

    visit(a, b, f, url1);
    visit(a, b, f, url2);
    back(a, b, f);
    back(a, b, f);
    back(a, b, f);
    forward(a, b, f);
    visit(a, b, f, url3);
    back(a, b, f);
    back(a, b, f);
    forward(a, b, f);
    forward(a, b, f);
    forward(a, b, f);
    cout << endl << "Pagina Actual: ";
    quit(a);
    */


    /* Cargar paginas tecleadas por el usuario */
    cout << "Navegacion Web" << endl;

    while (true){
        cout << "Para salir presiona enter o escribe QUIT!" << endl << endl;
        cout << "?>: ";

        if (cin.peek() == '\n'){
            quit(a);
            break;
        }

        getline(cin, url);

        /* Palabras RESERVADAS */
        string::size_type visitar  = url.find("VISIT", 0);
        string::size_type espacio  = url.find(" ", 0);
        string::size_type atras    = url.find("BACK", 0);
        string::size_type adelante = url.find("FORWARD", 0);
        string::size_type salir    = url.find("QUIT", 0);

        if (visitar != string::npos){
        tempURL.assign(url, 6, url.size());

        if (espacio != string::npos){
            visit(a, b, f, tempURL);
            cout << "OK!" << endl << endl;
            }
        }

        if (atras != string::npos){
            back(a, b, f);
            cout << "OK!" << endl << endl;
        }

        if (adelante != string::npos){
            forward(a, b, f);
            cout << "OK!" << endl << endl;
        }

        if (salir != string::npos){
            quit(a);
            cout << "OK!" << endl << endl;
            break;
        }
    }

    cout << endl << "Presiona una tecla para salir ... ";
    cin.get(); cin.get();
    return 0;
}

void visit(stack <string> &a, stack <string> &b, stack <string> &f, string url){
    b.push(a.top());
    a.push(url);

    while (!f.empty()) f.pop();

    quit(a);
}

void back(stack <string> &a, stack <string> &b, stack <string> &f){
    if (b.empty()){
         cout << "ignorado" << endl;
    }
    else {
        f.push(a.top());
        a.push(b.top());
        b.pop();

        quit(a);
    }
}

void forward(stack <string> &a, stack <string> &b, stack <string> &f){
    if (f.empty()){
         cout << "ignorado" << endl;
    }
    else {
        b.push(a.top());
        a.push(f.top());
        f.pop();

        quit(a);
    }
}

void quit(stack <string> a){
        cout << endl << "Actual: " << a.top() << endl;
}

 

Daniel Carrasco

daniel.to.md

Comments

There are currently no comments for this snippet.

Voting

Votes Up


Scripter i_kenneth

Votes Down