题解 CF20A 【BerOS file system】
anotherrainyday · · 题解
看了一下 还没有人用这个方法做
一看到这个题面 我就想到了replace 只要把"//" 替换成"/" 就可以把多余的"/" 消除掉了
于是有了
a = a.replace(a.find("//", 0), 2, "/");//把 //(两个字符)替换成/
但是一次肯定替换不完啊 所以
L1:
a = a.replace(a.find("//", 0), 2, "/");
if (a.find("//", 0) != string::npos)//string::npos就是找不到了
goto L1;
但是我RE了 原因是有可能并没有"//"(题目说的是至少有一个"/")
改进后得到
L1:
if (a.find("//", 0) == string::npos)
goto L2;
a = a.replace(a.find("//", 0), 2, "/");
goto L1;
L2:
但是又WA了 发现题面还说道
路径末的/可以省略
L1:
if (a.find("//", 0) == string::npos)
goto L2;
a = a.replace(a.find("//", 0), 2, "/");
goto L1;
L2:
if (a[a.length() - 1] == '/')
a = a.substr(0, a.length() - 1);
然后又WA了 因为如果整个路径就一个/ 那就会被去掉
L1:
if (a.find("//", 0) == string::npos)
goto L2;
a = a.replace(a.find("//", 0), 2, "/");
goto L1;
L2:
if (a[a.length() - 1] == '/' && a.length() != 1)//加了个判断
a = a.substr(0, a.length() - 1);
终于AC了QAQ
最后上完整代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
cin >> a;
L1:
if (a.find("//", 0) == string::npos)
goto L2;
a = a.replace(a.find("//", 0), 2, "/");
goto L1;
L2:
if (a[a.length() - 1] == '/' && a.length() != 1)
a = a.substr(0, a.length() - 1);
cout << a;
return 0;
}