本文主要是介绍CCF201604-3 路径解析 (100分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
试题编号: | 201604-3 |
试题名称: | 路径解析 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。文件有内容,用于存储数据。目录是容器,可包含文件或其他目录。同一个目录下的所有文件和目录的名字各不相同,不同目录下可以有名字相同的文件或目录。 输入格式 第一行包含一个整数 P,表示需要进行正规化操作的路径个数。 输出格式 共 P 行,每行一个字符串,表示经过正规化操作后的路径,顺序与输入对应。 样例输入 7 样例输出 /d2/d4/f1 评测用例规模与约定 1 ≤ P ≤ 10。 |
问题链接:CCF201604-3 路径解析
问题分析:就是处理 '.' 和 ‘..’ 的问题
程序说明:注意了解strtok函数的使用
提交后得100分的C++程序:
#include<stdio.h>
#include<iostream>
#include<string>
#include<cstring>
#include<vector>using namespace std;const int N=1000;
char a[N+1];void spilt(vector<string> &v,char *s)
{char *sp;sp=strtok(s,"/");while(sp){v.push_back(sp);sp=strtok(NULL,"/");}
}int main()
{int p;vector<string>sv;string cur,s;cin>>p>>cur;getchar();for(int i=1;i<=p;i++){memset(a,'\0',sizeof(a));sv.clear();getline(cin,s);if(s==""){ //处理空串 cout<<cur<<endl;continue;}if(s[0]!='/')s=cur+"/"+s; for(int j=0;j<s.length();j++)a[j]=s[j];spilt(sv,a);for(int k=0;k<(int)sv.size();k++){if(sv[k]==".")sv[k]="";else if(sv[k]==".."){sv[k]="";int t;for(t=k-1;t>0;t--)if(sv[t]!=""){sv[t]="";break;}if(t==0)sv[0]="/";}}bool flag=false;for(int t=0;t<(int)sv.size();t++)if(sv[t]!="/"&&sv[t]!=""){cout<<"/"<<sv[t];flag=true;}if(!flag)cout<<"/";cout<<endl;}return 0;
}
这篇关于CCF201604-3 路径解析 (100分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!