嘘~ 正在从服务器偷取页面 . . .

CCF路径解析---String::find()&&erase()


CCF-201604-3

下面都不会了

让我们先来看一下题目

1
2

解题思路

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;
}

结果


版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 梦想成为假面骑士的司祎同学 !
赏
评论
评论
 上一篇
CCFMarkdown---用到了状态机的思想 CCFMarkdown---用到了状态机的思想
CCF-201703-3 题目如下 解题思路1.先处理行内的强调和超级链接2.然后处理区块,用到了状态机思想(第一次切换状态的时候加前一状态的后缀和现在状态的前缀)3.过了样例后只有60分,把写的函数全部不用了,一起写到主函数,突然就可以了
2020-09-06
下一篇 
CCF画图---一个平平无奇的搜索题bfs CCF画图---一个平平无奇的搜索题bfs
CCF-201512-3 我们先来看一下题目吧 解题思路就是一个很平常的搜索题1.我们要完成画线和填充,把他简化为两个函数再一一击破 注意点:1.x1不一定大于x2,y1不一定大于y2,所以还要处理一下输入数据2.输出格式还要y其实相当于i
2020-09-05
  目录