原题目:点我

模拟即可,字符串处理麻烦点。如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹。

提示:高能,指针+动态内存,用数组太low(在noip中用数组才是王道!)

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int foldercnt=-1;//根目录已经算了一个了,所以要把自己去除掉
bool isleaf(string s)//判断这个字符串有没有斜杠
{
for(string::iterator it=s.begin();it!=s.end();++it)
if(*it=='/')return false;
return true;
}
string getname(string s)//得到这个字符串的第一个斜杠和第二个斜杠之间的字串
{
string ans;
int cnt=0;
for(string::iterator it=s.begin();it!=s.end();++it)
{
if(*it=='/')cnt++;
if(cnt==1&&*it!='/')ans.push_back(*it);
if(cnt==2)break;
}
return ans;
}
string getmy(string s)//得到这个字符串开始到第一个斜杠之间的字串
{
string ans;
bool have=0;
for(string::iterator it=s.begin();it!=s.end();++it)
{
if(*it=='/')have=1;
if(!have)ans.push_back(*it);
}
return ans;
}
string getrest(string s)//得到第一个斜杠之后的字串
{
string ans;
bool have=0;
for(string::iterator it=s.begin();it!=s.end();++it)
{
if(have)ans.push_back(*it);
if(*it=='/')have=1;
}
return ans;
}
struct folder//文件夹结构体
{
/***constructor***/
folder(string name)//构造函数
{
this->name=name;
this->son.clear();
foldercnt++;//文件数量++
}
~folder()//析构函数
{
for(vector<folder*>::iterator it=this->son.begin();it!=this->son.end();++it)//析构自己所有的子文件夹
if(*it!=NULL)
{
delete *it;
*it=NULL;
}
}
void make(string x)//制作函数
{
if(isleaf(x))return;//如果到这里是叶子了,返回
if(getmy(x)!=this->name)return;//这句话帮了我大忙
string nm=getname(x);//得到儿子的名称
for(vector<folder*>::iterator it=this->son.begin();it!=this->son.end();++it)//找一找有没有
{
if((*it)->name==nm)//如果有
{
(*it)->make(getrest(x));//切割字符串,进入子文件夹
return;//直接返回
}
}
folder* fp=new folder(nm);//没有的情况,新建文件夹
this->son.push_back(fp);//把文件夹放到儿子表列
fp->make(getrest(x));//make文件夹
return;
}
string name;//自己的名称
vector<folder*>son;//儿子表列
};
int main()
{
folder *root=new folder("");//根节点名字为空
int n;//数量
string tmp;//输入
cin >> n;//输入
for(int i=1;i<=n;i++)//循环输入
{
cin >> tmp;
root->make(tmp);//制作文件夹
cout << foldercnt << endl; //输出总数
}
delete root;//删除根文件夹,释放内存(你想想你平时删除文件夹了文件夹里面的东西全没了嘛)
root=NULL;//野指针
return 0;
}

洛谷P1738 洛谷的文件夹的更多相关文章

  1. Java实现 洛谷 P1738 洛谷的文件夹

    题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:/luogu/application/c ...

  2. 2021.08.05 P1738 洛谷的文件夹(树形结构)

    2021.08.05 P1738 洛谷的文件夹(树形结构) P1738 洛谷的文件夹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树!! 题意: 给出n个网页路径,求 ...

  3. Luogu P1738 洛谷的文件夹

    P1738 Luogu 发一个链表题解! 仅有24ms,排名第一哦~ 圆圈代表点,每个店有两个指针,一个指向自己兄弟(同级文件夹),另一个指向自己孩子(子文件夹),还有一个保存当前名字. 有点像二叉树 ...

  4. Luogu1738 | 洛谷的文件夹 (Trie+STL)

    题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:\(/luogu/application ...

  5. android多国语言文件夹文件汇总

    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...

  6. Android 文件夹命名规范 国际化资源

    Android 文件夹命名规范 国际化资源 android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values- ...

  7. android多国语言文件夹

    android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh ...

  8. Android各国语言Values文件夹命名规则

    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...

  9. vscode搜索所有文件夹中所有文件的方法

    最近在看opencv相关的内容,看到画图这一部分时,提示我  这些代码都来自OpenCV代码的sample文件夹. 按照他的提示,我打开了相应的文件夹,却发现,so many 文件 and 文件夹,这 ...

随机推荐

  1. 【python】删除1~100的素数

    def delPrime(x): if x==1: return True for y in range(2,x): if x%y==0: return True return False x1=ra ...

  2. Random:产生随机数的类

    /* * Random:产生随机数的类 * * 构造方法: * public Random():没有给种子,用的是默认种子,是当前时间的毫秒值 * public Random(long seed):给 ...

  3. EditText 自动格式化电话电话号码

    需要格式化的格式为:xxx xxxx xxxx 有两种方式:1.为监听当前输入的长度,当长度为第四位,九位的时候,在原内容上追加空格.(from stackOverFlow)2.每次输入后,格式化当前 ...

  4. Capture a Screen Shot

    using System; using System.Runtime.InteropServices; using System.Drawing; using System.Drawing.Imagi ...

  5. sql(转自http://www.imooc.com/article/2325)

    http://www.imooc.com/article/2325

  6. Marathon

    早上,挣扎到十点才起,刚好去吃过饭,来教研室,等待着中午的马拉松. 中午一直是很激动,有些紧张.一直到整个马拉松跑完,我达到了我唯一的目标,保持均匀的呼吸节奏.但我能明显感觉到,我并没有拼尽全力.我不 ...

  7. 关于 presentViewController 时机

    类似微信.QQ这些应用如果用户没有登录,会弹出登录界面,如果 presentViewController 是写在  viewDidAppear 之前,会有警告 Presenting view cont ...

  8. Spring MVC入门知识总结

    2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...

  9. DataSet读取XML

    string file = File.ReadAllText("c://123.xml", Encoding.Default); using (DataSet ds = new D ...

  10. Microsoft source-code annotation language (SAL) 相关

    More info see: https://msdn.microsoft.com/en-us/library/hh916383.aspx Simply stated, SAL is an inexp ...