题解 | #配置文件恢复#

配置文件恢复

https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5

#include <iostream>
#include <vector>
#include <string>
using namespace std;
//把输入的命令拆成两个单词判断,之前想的时都存在一个vector<string>里,原命令行中用二维的vector存储,实际上这两种再后面分别判断两个单词时都不好遍历
//因为输入的单词还要从空格拆开,又要写函数,二维数组遍历时[]加上[],更难判断。不如直接用两个字符串变量分别接收第一个和第二个单词(遇到没有第二个单词的情况就
//直接存成“”),而命令行也用vector<pair<string,string>>来存,到时候直接写成first second就可以了
//依次判断flag1是否存在于first中(且POS==0),flag2是否存在于second中,POS=0。两个都为真,说明能匹配的个数+1.最后要看总的能匹配的个数,必须=1才行,多了也不可以)
int main() {
    vector<pair<string,string>>dic={ {"reset",""},{"reset","board"}, {"board","add"},{"board","delete"},{"reboot","backplane"},{"backplane", "abort"}};
    vector<string>dic1{"reset what","board fault","where to add","no board at all","impossible","install first"};
    int dlen = dic.size();
    string s;
    while (getline(cin, s)) {//接收字符串后再从' '处拆成两个存
        string s1="",s2="";
        int pos=0;
       while(pos<s.size()&&s[pos]!=' '){
        pos++;}
        s1=s.substr(0,pos);
        if(pos!=s.size()){s2=s.substr(pos+1,s.size()-pos-1);}//如果有第二个词,就用s2存,如果没有第二个词,s2就还等于“ ”。
        int count=0; //匹配上的个数
        string result;
        for(int i=0;i<dlen;i++){
        int flag1=dic[i].first.find(s1)==0?1:0;//第一个单词能否匹配上
        int flag2=0;
        if(s2!=""){//s2有单词时,看看能不能在命令的second中找到s2,pos=0
            flag2=dic[i].second.find(s2)==0?1:0;
        }//如果s2="",且命令行的second也=““,说明就没有第二个单词,flag2直接=1就可以
        else if(s2==""&&dic[i].second==""){flag2=1;}
        if(flag1==1&&flag2==1){
            count++;//匹配上的次数+1
            result=dic1[i];//记录一下匹配上的这个命令时什么
        }

        }
        if(count==1){cout<<result<<endl;}//当且仅当只能匹配上一个命令时,才输出
        else{cout << "unknown command" << endl;}
        }
    return 0;
}

全部评论

相关推荐

到底什么时候能从池子里出来
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务