ccf真题-201604-3-.路径解析-题解
2017-03-10 20:03
246 查看
题目:路径解析题目
1.
2.根据题目指示的输入输出:
输入格式:第一行包含一个整数 P,表示需要进行正规化操作的路径个数。
第二行包含一个字符串,表示当前目录。
以下 P 行,每行包含一个字符串,表示需要进行正规化操作的路径。
输出格式:共 P 行,每行一个字符串,表示经过正规化操作后的路径,顺序与输入对应。
3.AC代码:
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
1.
需要规范化的情况 | 解决 |
---|---|
输入为空 | 输出当前位置 |
输入为相对路径 | 修改为绝对路径 |
遇到 /../ | 若前面没有了,说明是根目录,没有上一层直接删去; 若前面还有,则需要把前面一个目录或文件名也删去 |
遇到 /./ | 表示当前位置,可直接删去 |
遇到多个/ | 只保留一个 |
输入格式:第一行包含一个整数 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
相关文章推荐
- ccf 201604-3 路径解析
- CCF 201604-3 路径解析
- CCF 201604 -3 路径解析
- CCF CSP 路径解析 JAVA 201604-3 100分
- CCF_201604-3_路径解析
- CCF-201604-3 路径解析(模拟)
- CCF 201604-3 路径解析
- 【CCFCSP】201604-3 路径解析
- CCF-CSP 路径解析 JAVA 201604-3
- CCF 201604-3 路径解析
- CCF 201604-3 路径解析 java实现w
- CCF CSP 编程题目和解答-----试题名称:路径解析 -------201604-3
- CCF从业资格认证 201604-3 路径解析
- CCF CSP 201604-3 路径解析
- CCF 201604-3 路径解析 (60分)
- CCF 习题 201604-3 路径解析 (STL模拟)
- CCF 201604-3 路径解析 题解
- CCF 201604-03 路径解析
- ccf认证路径解析90分运行错误
- CCF201312真题及题解(能力有限,欢迎交流)