#include #include #include using namespace std; void visit(stack &a, stack &b, stack &f, string url); void back(stack &a, stack &b, stack &f); void forward(stack &a, stack &b, stack &f); void quit(stack a); int main(){ stack 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 &a, stack &b, stack &f, string url){ b.push(a.top()); a.push(url); while (!f.empty()) f.pop(); quit(a); } void back(stack &a, stack &b, stack &f){ if (b.empty()){ cout << "ignorado" << endl; } else { f.push(a.top()); a.push(b.top()); b.pop(); quit(a); } } void forward(stack &a, stack &b, stack &f){ if (f.empty()){ cout << "ignorado" << endl; } else { b.push(a.top()); a.push(f.top()); f.pop(); quit(a); } } void quit(stack a){ cout << endl << "Actual: " << a.top() << endl; }