本文共 1134 字,大约阅读时间需要 3 分钟。
为了做这道题,我又重新去学习了string类,太阔怕了
这道题题目很长,很烦,不想看,于是乎,提取重点来啦:如下图,是一个常见的目录,对吧根目录名字就是/..表示返回上级目录/和./之类的都是分隔符,不用管它就是了本题就是现在你处在某个目录下,你输入一堆目录,然后把它们化为标准格式就OK比如第一个f1文件夹就是 /d1/f1f3文件夹 /d2/d3/f3但是你输入的文件格式可能不对,比如f3文件夹,你输入/d2/./d3///f3/,题目要求你需要把它弄成/d2/d3/f3还有就是当前目录是/d1,你输入../d2/d3/f3,..代表返回上级目录,所以你从d1返回根目录/,然后进入d2,d3,f3,所以你应该把它标准化为/d2/d3/f3
#include#include #include using namespace std; int n;//路径个数string now,path,st;//当前目录,输入目录字符串,st相当于tmpdeque p;//绝对路径以"/"开头//相对路径不以"/"开头int main(){ cin>>n; cin>>now;//输入当前路径 cin.get();//消除换行符的影响 while(n--){ p.clear();//初始化清空栈 getline(cin,path);//输入目录 if(path.length()==0)//如果输入为空行,输出当前目录 path=now; if(path[0]!='/'){ //相对路径 ,那么就把它们连接起来 st=path; path=now; //str.append连接函数,包含在C++ string类里面 path.append(1,'/'); path.append(st); } for(int i=0; i >st){ //读入一个字符串,每遇到空格停止,直到读完,循环结束 if(st==".") continue; else if(st==".."&&!p.empty())//返回上级目录 p.pop_back(); else if(st!="..")//如果是路径名,就让它入栈 p.push_back(st); } cout<<"/";//输出/ ,表示目录开始 for (int i=0;i 0) cout <<"/"; //在开始删掉的空格处补上目录需要的/ cout<
转载地址:http://xdwzi.baihongyu.com/