华为OD机试真题-模拟项目管理-2024

#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>



std::vector<std::string> SplitString(std::string& str, const std::string& reg)
{
    std::string::size_type posLast = 0;
    std::string::size_type posCurrent = str.find(reg);

    std::vector<std::string> result;
    while (posCurrent != std::string::npos)
    {
        result.push_back(str.substr(posLast, posCurrent - posLast));
        posLast = posCurrent + reg.length();
        posCurrent = str.find(reg, posLast);
    }
    if (posLast < str.length())
    {
        result.push_back(str.substr(posLast));
    }
    return result;
}

//构建文件管理class, 每一个目录是一个节点, 每一个目录节点可能包含子目录节点
class FileSystem
{
    struct Directory
    {
        std::unordered_map<std::string, Directory*> mapChildren;
    };
    Directory* root;         //根目录
    Directory* current;      //当前目录
    std::string currentPath; //当前地址

public:
    FileSystem()
    {
        root = new Directory;
        current = root;
        currentPath="/";
    }
public:
    void Mkdir(const std::string& dir)
    {
        if (current->mapChildren.find(dir) == current->mapChildren.end())
        {
            current->mapChildren[dir] = new Directory;
        }
    }

    void Cd(const std::string& dir,const std::string& directoryTag)
    {
        if (dir == "..")
        {
            //不是根目录
            if (current != root)
            {
                int pos=currentPath.rfind(directoryTag.c_str()[0], currentPath.length() - 2);
                // /a/b/c/  ---> 最后一个/出现的位置
                currentPath= currentPath.substr(0, pos+1);
                current = root;
                std::vector<std::string> strs = SplitString(currentPath, directoryTag);
                for (const std::string& item : strs)
                {
                    if (!item.empty() && current->mapChildren.find(item) != current->mapChildren.end())
                    {
                        current = current->mapChildren[item];
                    }
                }
            }
        }
        else
        {
            if (current->mapChildren.find(dir) == current->mapChildren.end())
                return;
            currentPath = currentPath + dir + directoryTag;
            current = current->mapChildren[dir];
        }
    }
    std::string Pwd(const std::string& str)
    {
        return currentPath;
    }
};


bool CheckDirectory(const std::string& str, const std::string& directoryTag)
{
    if (str.find(directoryTag) != std::string::npos)
    {
        return false;
    }
    return true;
}

void main()
{
    std::string result;
    const std::string mkdirString = "mkdir";
    const std::string cdString = "cd";
    const std::string pwdString = "pwd";
    const std::string directoryTag="/";

    FileSystem fileSys;

    std::string str;
    while (std::getline(std::cin, str))
    {
        //如果是创建目录命令
        if (str.find(mkdirString) != std::string::npos)
        {
            std::string::size_type pos = str.find(mkdirString);
            std::string dir = str.substr(pos + mkdirString.length() + 1);
            if (CheckDirectory(dir, directoryTag))
            {
                fileSys.Mkdir(dir);
            }
        }
        else if (str.find(cdString) != std::string::npos)         //如果是打开目录命令
        {
            std::string::size_type pos = str.find(cdString);
            std::string dir = str.substr(pos + cdString.length() + 1);
            if (CheckDirectory(dir, directoryTag))
            {
                fileSys.Cd(dir, directoryTag);
            }
        }
        else if (str.find(pwdString) != std::string::npos)
        {
            std::string::size_type pos = str.find(cdString);
            std::string dir = str.substr(pos + cdString.length() + 1);
            if (CheckDirectory(dir, directoryTag))
            {
                std::string res=fileSys.Pwd(dir);
                std::cout << res << std::endl;
            }
        }
    }
}

华为OD2024 E 文章被收录于专栏

实时更新华为2024 E卷答案

全部评论

相关推荐

11-27 16:49
帆软软件_招聘
&nbsp;招聘岗位名称:【基建项目经理】一、主要职责1、计划制定:负责组织制定总部产业园建设及未来运营的各项年度目标与计划,对环境运营情况负责,控制公司各项行政费用的支出,并对成本控制的方法提出建议;2、业务标准管理:全面负责所管辖办公室日常管理工作,统筹管理基建、物业服务、保洁、安保等工作,对工程管理质量体系考核,监督各项业务标准的落地实施;3、工程项目管理:负责总部园区的工程实施管理及全球办公室新换退租等工作,包括但不限于开工准备管理、工程设计管理、工程安全管理、工程质量管理、工程进度管理、工程造价管理、工程信息管理、工程资料管理和工程竣工验收管理的归口管理工作;4、质量管理:负责组织工程初步设计、施工图设计、施工方案、技术方案进行会审,及时协调解决施工中出现的各种问题;制定同学满意度提升计划,规划和协调办公室行政类工作,建立并完善公司整体的环境运营的工作流程;5、危机处理:负责组织项目紧急突发事件的预防和处理;6、品牌运营:对外负责对外与政府部门建立良好的公共关系等,维护与街道、社区、派出所等相关部门的关系;对内建立良好的客户关系,及时妥善处理各类需求和投诉。二、职位要求1、本科以上学历,工程管理、土木工程、建筑类专业并有相关项目管理经验,熟悉项目方案、预算和决算的制定优先;2、有商业、办公、综合体管理工作经验者为佳,具备全国知名开发或物业管理企业同等岗位工作经验;有中高端项目管理经验者优先;3、责任心强,有较强的沟通、协调能力,良好的团队意识,对外部环境有敏税的观察能力;4、熟悉工程、物业、商管行业相关服务的标准规范、运作流程和法律法规,能够有效组织开展质量管理工作。三、薪资结构10k-16k,base&nbsp;无锡帆软
投递帆软软件等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务