题目描述
Input
第一行包含一个整数 P,表示需要进行正规化操作的路径个数。
第二行包含一个字符串,表示当前目录。
以下 P 行,每行包含一个字符串,表示需要进行正规化操作的路径。
Output
共 P 行,每行一个字符串,表示经过正规化操作后的路径,顺序与输入对应。
解题思路
最核心的在于对输入的路径字符串进行处理变形,便于后续操作,同时对于当前目录与待正规化的路径,处理方式不同:
- 当前目录:将每个路径中以 / 分割的部分单独存入当前目录的数组中加以记录;
- 待正规化路径:
- 判断是否为空:空则与当前目录一致;
- 删去“//”中多余的一个“/”;
- 删去“/./”中多余的“./”;
- 判断路径首字符是否为“/”:是则需加上当前目录的数组;
- 将每个路径中以 / 分割的部分单独存入待正规化路径的数组中加以记录;
- 遇到“…”则从数组末尾弹出一个。
最后按照要求格式输出即可。
实现代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<string> v_cur,v_now;
void cur_change(string s)
{
string temp="";
for(int i=1;i<s.size();++i)
{
if(s[i]!='/')
temp+=s[i];
else
{
v_cur.push_back(temp);
temp="";