ccf真题-201604-3-.路径解析-题解

题目:路径解析题目

1.

需要规范化的情况 解决
输入为空 输出当前位置
输入为相对路径 修改为绝对路径
遇到 /../ 若前面没有了,说明是根目录,没有上一层直接删去;
若前面还有,则需要把前面一个目录或文件名也删去
遇到 /./ 表示当前位置,可直接删去
遇到多个/ 只保留一个








2.根据题目指示的输入输出:

输入格式:第一行包含一个整数 P,表示需要进行正规化操作的路径个数。

第二行包含一个字符串,表示当前目录。

以下 P 行,每行包含一个字符串,表示需要进行正规化操作的路径。

输出格式:共 P 行,每行一个字符串,表示经过正规化操作后的路径,顺序与输入对应。


3.AC代码:

// ===============================================================================
// File Name           :    ccf真题-201604-3-.路径解析AC代码.cpp
// Author              :    Sneexy
// Create Time         :    2017/03/10 19:40:49
// Update Time         :    2017/03/10 19:40:49
// CSDN blog address   :    http://blog.csdn.net/qq_33810513
// refer to            :    http://blog.csdn.net/zhembrace/article/details/52355553
// ===============================================================================
#include 
#include
using namespace std;
int main()
{
	int num,pos,pos1;
	string curPos,line;
	cin >> num >> curPos;
	getchar();
	while (num--)
	{
		getline(cin, line);
		//  1.首位不为'/'的情况
		if (line.empty())line = curPos;
		else if (line[0] != '/')line = curPos + "/" + line;
		//  2.出现/../
		while ((pos = line.find("/../")) != -1)
		{
			if (!pos)line.erase(0, 3);
			else{
				pos1 = line.rfind("/", pos - 1);
				line.erase(pos1, pos - pos1 + 3);
			}
		}
		while ((pos = line.find("/./")) != -1)line.erase(pos, 2);//   3.出现/./
		while ((pos = line.find("//")) != -1) line.erase(pos, 1);//   4.出现///
		if (line.size()>1 && line[line.size() - 1] == '/')line.erase(line.size() - 1, 1);//   5.末尾有/
		cout << line << endl;// 6.最后输出
	}
	return 0;
}

4.需要注意的地方:

——如果用cin>>line的方式输入string类型的line,会导致不能判断为空的输入,所以采用getline。而且在while循环之前还需要添加getchar(),吸收换行。否则90分;

——c++中单双引号的区别:

""是字符串,C风格字符串后面有一个'\0';''是一个字符,一共就一字节。

单引号表示是字符变量值,字母的本质也是数字。双引号表示字符串变量值,给字符串赋值时系统会自动给字符串变量后面加上一个\0来表示字符串结尾。

——string rfind用法:

找到字符串中最后一个和搜索字串一致的位置,而不是查找和搜索字串反过来以后匹配的位置


5.参考:

http://blog.csdn.net/zhembrace/article/details/52355553  题解

http://blog.csdn.net/youxin2012/article/details/9162415    find()和rfind()用法


Written by Sneexy


发布了48 篇原创文章 · 获赞 21 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_33810513/article/details/61205018