leetcode 简化路径

问题描述:

/a/b/../../c简化后为/c

/a//b././简化后为/c

问题解析:将字符串转换为istringstream流,进行字符串分割,是"..”并且进入一层目录,则进行回退(pop_back),如果是目录,则保存目录;如果是“..”并且没有目录级可回退,则在根目录下;若为“.”或者为空(两个//)则跳过

使用getline对字符串进行分割,函数原型为:

istream& getline (char* s, streamsize n );

istream& getline (char* s, streamsize n, char delim );

作用:作用是从istream中读取至多n个字符保存在s对应的数组中。即使还没读够n个字符,如果遇到换行符'\n'(第一种形式)或delim(第二种形式),则读取终止,'\n'或delim都不会被保存进s对应的数组中。

getline(cin,str);从输入流中读取一行,并保存读取内容到str中,不包括换行符。

#include<string>
#include<vector>
#include<sstream>
#include<iostream>
using namespace std;
string simplifyPath(string path) {
	istringstream ss(path);
	string s;
	vector<string>res;
	while (getline(ss, s, '/')){
		if (s==""||s=="."){
			continue;
		}
		else if (s == ".." && !res.empty()){
			res.pop_back();
		}
		else if(s!=".."){
			res.push_back(s);
		}
    }
	string way;
	for (int i = 0; i < res.size(); i++){
		way += "/" + res[i];
	}

	return res.empty()?"/":way;
}
int main()
{
	string s = "/a/b/c../..///d./d/s";
	string res = simplifyPath(s);
	cout << res << endl;
	system("pause");
}

参考:https://www.nowcoder.com/questionTerminal/393e5a246a7546d1b2e4d7719647b7d9

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值