C++力扣71.简化路径
储备知识C++istringstream用法istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开。C++ getline函数用法C++中有两种getline函数第一种:头文件istream中,是iostream类的成员函数第二种:头文件string中,是普通函数istream& getline(char*s, streamsize n);istream&
储备知识
istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开。
C++中有两种getline函数
第一种:头文件istream中,是iostream类的成员函数
第二种:头文件string中,是普通函数
istream& getline(char*s, streamsize n);
istream& getline(char* s, streamsize n, char delim);
在istream中,getline有两种重载形式,如上述所示,作用是:从istream中读取至多n个字符(包含结束标记符)保存到s对应的数组中。即便没有读够n个字符,如果遇到了delim,读取将会终止,delim不会被保存在s中。
istream& getline(istream& is, string& str, char delim);
istream& getline(istream&& is, string & str, char delim);
istream& getline(istream& is, string& str);
istream& getline(istream&& is, string7 str);
在string头文件中,getline函数有四种重载形式,如上述代码所示。读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。
函数变量:
is:表示一个输入流,如cin或者istringstream对象
str:string类型的引用,用来存储输入流中的流信息。
delim:char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。
对于力扣的题目71简化路径而言,可以利用上述知识点进行处理。
题目描述
你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
始终以斜杠 ‘/’ 开头。
两个目录名之间必须只有一个斜杠 ‘/’ 。
最后一个目录名(如果存在)不能 以 ‘/’ 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 ‘.’ 或 ‘…’)。
返回简化后得到的 规范路径 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/simplify-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
string simplifyPath(string path) {
vector<string> temp;
istringstream is(path);//将path字符串转变成istream数据流
string result;
while(getline(is, result, '/')){//利用getline函数,将数据流is以'/'划分成不同的string对象
if(!result.empty()&&result!="."&&result!=".."){
//被划分成的string对象result不是空的,不是'.',不是'..',都将该字符串存入到temp中
temp.push_back(result);
}else if(!temp.empty() && result==".."){
//如果划分成的string对象是'..',且temp不是空的,就弹出其中最后的string元素
temp.pop_back();
}
}
if(temp.empty()){
return "/";
}
result.clear();
for(auto s : temp){
result += "/";
result += s;
}
return result;
}
};
更多推荐
所有评论(0)