CCF-201604-3

让我们先来看一下题目


解题思路
1.看到这种文本字符处理的题,肯定烦躁,这个简单看着都烦;
2.先冷静下来,分析需求;
3.输入后,先处理空串和相对路径(+path);
4.一个一个点来消除,先是多余的/,再是/./然后是/../这个要考虑全面
5.结束了末尾的/要除掉,但是如果只有一个是要保留的
陷阱
1.后面输入用cin>>str只能拿90分
2.反正有些地方很容易掉情况,找了好久,一个一个的试样例就行
3.注意一下删除的顺序
代码
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n;
cin>>n;
string path,str;
cin>>path;
cin.ignore();
while(n--){
getline(cin,str);
//cin>>str; //cin只能拿90
if(str.empty()) str+=path;
else if(str[0]!='/') str=path+'/'+str;
while(str.find("//")!=str.npos){
int pos=str.find("//");
int cnt=2;
while(str[pos+cnt]=='/') cnt++;
str.erase(pos+1,cnt-1);
}
while(str.find("/./")!=str.npos){
int pos=str.find("/./");
str.erase(pos+1,2);
}
while(str.find("/../")!=str.npos){
int pos=str.find("/../");
if(pos==0) str.erase(pos+1,3);
else{
int begin=str.rfind("/",pos-1);
str.erase(begin,pos-begin+3);
}
}
if(str.length()>1&&str[str.length()-1]=='/')
str.erase(str.length()-1);
cout<<str<<endl;
}
return 0;
}
