发布时间:2023-10-02 14:00
博主写完了今天给自己规定要完成的作业,就继续开启了我们的刷题之路。
咱们之前已经完成了:
1.如何让自己下定决心一定要刷题
2.一起备战蓝桥杯与CCF-CSP(1)
让咱们一步一个脚印,一起冲吧!
为了鼓励自己,鼓励大家,我们一次一个小鸡汤!
tips:由于博主也不厉害,所以可能之前写的博文中有bug或者有疑问,但是我解决了之后,都会将博文更新,并且进行相应说明,比如在(1)中,就对之前的bug进行了解决
我们要相信:世上无难事,只要肯登攀!
概览:
刷题体会
题目坑点&解题思路
正解与解决
好了,咱们正式进入主题。
先说今天刷题我领悟到的体会:
今天刷的题目是:2016-04-03:路径解析
解决思路:
上我的代码(没什么看头,大家可直接略过),用于反面教材:
#include
#include
#include
using namespace std;
int n;
stack<string>sta;
int main()
{
int n;
cin>>n;
string s,temp1=\"\";
cin>>s;
for(int i=0;i<s.size();)
{
if(s[i]==\'/\')
{
i++;
while( i<s.size() && s[i]!=\'/\' )
{
temp1+=s[i];
i++;
}
sta.push(temp1);
temp1=\"\";
}
}
while(n--)
{
string s1,temp=\"\";
cin>>s1;
stack<string>st2;
for(int i=0;i<s1.size();)
{
temp=\"\";
if(i+1<s1.size() && s1[i]==\'.\' &&s1[i+1]==\'/\')//处理./
{
i+=2;
}
else if(i+1<s1.size() && s1[i]==\'.\' && s1[i+1]==\'.\' )//处理../
{
i+=3;
int j=i;
//cout<
while(s1[j]!=\'/\')
{
temp+=s1[j++];
//cout<
}
while(!sta.empty() && sta.top()!=temp)
{
sta.pop();
}
while(!sta.empty())
{
cout<<sta.top();
sta.pop();
cout<<\"/\";
}
i=j+1;
}
else if(s1[i]==\'/\')
{
cout<<\'/\';
i++;
while(s1[i]==\'/\')
{
i++;
}
}
else
{
while(i<s1.size() && s1[i]!=\'/\' )
{
temp+=s1[i++];
}
cout<<temp;
st2.push(temp);
temp=\"\";
}
}
cout<<endl;
sta=st2;
}
return 0;
}
没啥好说的,就是按照题目来,由臭又长不说,过了样例交了一发。
Acwing一个点没过,官网过30%。
看了看y总讲解,似懂非懂,但是给了我很多写代码的启发,浅写了一下代码是干嘛的:
#include
#include
#include
#include
using namespace std;
vector<string> get(string& str)//处理\'/\',直接将目录名称,文件名称,\'.\',\'..\'夹存入vector,方便后续处理
{
vector<string> res;
for (int i = 0; i < str.size(); i ++ )
{
if (str[i] == \'/\') continue;
int j = i + 1;
while (j < str.size() && str[j] != \'/\') j ++ ;
res.push_back(str.substr(i, j - i));
i = j;
}
return res;
}
void walk(vector<string> cur, vector<string> path)
{
for (auto p: path)
{
if (p == \".\") continue;
if (p == \"..\")
{
if (cur.size()) cur.pop_back();
}
else cur.push_back(p);
}
if (cur.empty())
{
puts(\"/\");
return;
}
for (auto p: cur)
cout << \"/\" << p;
cout << endl;
}
int main()
{
int n;
string str;
cin >> n >> str;
vector<string> cur = get(str), ap;
getchar();
while (n -- )
{
getline(cin, str);
auto path = get(str);
if (str.size() && str[0] == \'/\') walk(ap, path);//是绝对路径
else walk(cur, path);//相对路径
}
return 0;
}
作者:yxc
链接:https://www.acwing.com/activity/content/code/content/875202/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
好了,对比了y总代码,我写的是真的lj,就当给大家反面教材了,以后的码风一定像y总靠拢。
一起加油!!!✌️✌️✌️