1028 Web Navigation
2015-10-17 10:50
260 查看
题目链接: http://poj.org/problem?id=1028
题意: 模拟浏览器的前进/后退/访问/退出 的四个操作. 输出当前访问的URL或者Ignore(如果不能前进/后退).
分析: 用一个vector加上当前位置索引index即可. 当进行visit一个新的URL时, 应该基于当前URL重新建立FORWORD表(清空以前的FORWORD元素即可).
教训: 操作容器时, 如果对容器进行改变, 那么对应的size()等等也要考虑变化, 否则机会出错.
题意: 模拟浏览器的前进/后退/访问/退出 的四个操作. 输出当前访问的URL或者Ignore(如果不能前进/后退).
分析: 用一个vector加上当前位置索引index即可. 当进行visit一个新的URL时, 应该基于当前URL重新建立FORWORD表(清空以前的FORWORD元素即可).
教训: 操作容器时, 如果对容器进行改变, 那么对应的size()等等也要考虑变化, 否则机会出错.
#include <iostream> #include <vector> using namespace std; vector<string> vs; int main(){ string cmd; string addr; int index = 0; vs.push_back(string("http://www.acm.org/")); while(cin>>cmd && cmd != "QUIT"){ if(cmd == "VISIT"){ cin>>addr; /* 这样会wa,因为pop_back()操作会影响到for循环中的条件vs.size()的改变. if(index != vs.size()-1){ for(int i=0;i<vs.size()-index-1;++i){ vs.pop_back(); } } */ while(index < vs.size()-1){ vs.pop_back(); } vs.push_back(addr); index++; cout<<vs[index]<<endl; }else if(cmd == "BACK"){ if(index==0){ cout<<"Ignored"<<endl; }else{ index--; cout<<vs[index]<<endl; } }else if(cmd == "FORWARD"){ if(index==vs.size()-1){ cout<<"Ignored"<<endl; }else{ index++; cout<<vs[index]<<endl; } }else{ cout<<"Ignored"<<endl; } } return 0; }
相关文章推荐
- c/c++内存释放知识总结
- Lock锁
- AlertDialog实现
- Nginx部署时发现的问题
- 浅析getPhysicalNumberOfCells 和 getLastCellNum的区别
- 菜鸟之伤-Volley get请求数据乱码问题
- 停止线程方法
- ndis协议驱动开发
- Atitit..文件上传组件选择and最佳实践的总结(2)----HTTP
- 在Mac上配置Android adb命令
- poj Shortest Prefixes 2001 (字典树模板)
- SQL DEFAULT 约束 高级教程
- join方法
- 在Mac上配置Android adb命令
- 电磁学第1章作业题答案
- 谈谈java虚拟机中的参数。
- 安卓Eclipse如何快速修改工程名及包名
- 谈谈Java技术优化的相关信息
- JS获取系统时间、计算两个日期天数、比较日期大小
- Mac系统打开命令行终端及查看操作系统版本号的方法