您的位置:首页 > 其它

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

2017-03-10 20:03 246 查看
题目:路径解析题目

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: