华为机试题66-配置文件恢复

2023-11-08

描述

有6条配置命令,它们执行的结果分别是:

命   令 执   行
reset reset what
reset board board fault
board add where to add
board delete no board at all
reboot backplane impossible
backplane abort install first
he he unknown command

注意:he he不是命令。

为了简化输入,方便用户,以“最短唯一匹配原则”匹配(注:需从首字母开始进行匹配):

1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;
2、若只输入一字串,但匹配命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,但是该命令有两个关键词,所有匹配失败,执行结果为:unknown command

3、若输入两字串,则先匹配第一关键字,如果有匹配,继续匹配第二关键字,如果仍不唯一,匹配失败。

例如输入:r b,找到匹配命令reset board 和 reboot backplane,执行结果为:unknown command。

例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。

4、若输入两字串,则先匹配第一关键字,如果有匹配,继续匹配第二关键字,如果唯一,匹配成功。例如输入:bo a,确定是命令board add,匹配成功。
5、若输入两字串,第一关键字匹配成功,则匹配第二关键字,若无匹配,失败。例如输入:b addr,无法匹配到相应的命令,所以执行结果为:unknow command。
6、若匹配失败,打印“unknown command”

注意:有多组输入。

数据范围:数据组数:1≤t≤800 ,字符串长度1≤s≤20 

进阶:时间复杂度:O(n) ,空间复杂度:O(n)

输入描述:

多行字符串,每行字符串一条命令

输出描述:

执行结果,每条命令输出一行

示例1

输入:

reset
reset board
board add
board delet
reboot backplane
backplane abort

输出:

reset what
board fault
where to add
no board at all
impossible
install first


解题思路:

先用一个字符数组接收命令,然后根据是否有空格将其划分为两个字符串。如果没有空格,说明只有一个字符串,仅需对比第一条配置命令,查看输入字符是否与配置命令相同,若相同,打印正确的执行结果,否则打印错误提示;若有空格,则需匹配两个字符串是否分别与两个单词相同,注意需要对比5个配置命令,如果都没匹配上,或者匹配上不止1个,需要打印错误提示,匹配上其中一个就打印相对应的错误提示。

(注意上述说的匹配单词是指根据输入命令的长度,从单词的第一个字母从前往后依次对比,不是说输入的命令一定要与配置命令的单词完全一样)

代码如下:

#include <stdio.h>
#include <string.h>
#define    N    20
int main()
{
    int len,i,j,k,flag,arr[6],len1,len2;
    char command1[6][20]={"reset","reset","board","board","reboot","backplane"};
    char command2[6][20]={"\0","board","add","delete","backplane","abort"};
    char order1[N],order2[N];
    while(gets(order1))
    {
        j=0;flag=0;
        len=strlen(order1);
        for(i=0;i<len;i++)            //将输入的字符分成两个单词分别进行对比
        {
            if(order1[i]==' ')
            {
                order1[i]='\0';
                flag=1;
                continue;
            }
            if(flag)
                order2[j++]=order1[i];
        }
        order2[j]='\0';
        len1=strlen(order1);
        len2=strlen(order2);
        if(!len2)             //len2为0,说明输入的命令只有一个单词,此时仅需匹配第一条命令
        {
            for(i=0;i<len1;i++)        //从第0个字母开始,从前往后对比
            {
                if(order1[i]!=command1[0][i])        //遇到不相等的就终止对比,此时i<len1
                    break;
            }
            if(i<len1)
                printf("unknown command\n");
            else
                printf("reset what\n");
        }
        else           //len2不为0,有两个单词,从第一个单词开始对比,如果相等,再对比第2个单词
        {
            for(i=0;i<6;i++)
                arr[i]=0;            //arr数组记录是否匹配上了,匹配上的是哪一条命令
            for(i=1;i<6;i++)                //需要遍历5条配置命令
            {
                for(j=0;j<len1;j++)
                {
                    if(order1[j]!=command1[i][j])   //第一个单词匹配中遇到不相同的字母,终止
                        break;
                }
                if(j==len1)            //第一个单词匹配成功,可以进行后续的第二个单词的匹配
                {
                    for(j=0;j<len2;j++)
                    {
                        if(order2[j]!=command2[i][j])
                            break;
                    }
                    if(j==len2)       //第二个单词也匹配成功,arr数组记录,下标对应哪一条命令
                        arr[i]=1;   
                }
            }
            for(i=1;i<6;i++)
                arr[0]+=arr[i];            //arr[0]为匹配上的配置命令之和,只有为1才正确
            if(arr[0]==0||arr[0]>1)
                printf("unknown command\n");
            else
            {
                if(arr[1])
                    printf("board fault\n");
                if(arr[2])
                    printf("where to add\n"); 
                if(arr[3])
                    printf("no board at all\n");
                if(arr[4])
                    printf("impossible\n");
                if(arr[5])
                    printf("install first\n");
            }
        }
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为机试题66-配置文件恢复 的相关文章

  • 15.图像拼接

    目录 1 项目介绍 2 代码实现 2 1 ImageStiching 2 2 Stitcher 2 2 1 cv show 2 2 2 stitch 2 2 3 detectAndDescribe 2 2 4 stitch 2 2 5 ma
  • 头插法和尾插法建立单链表

    在进行单链表的基本运算之前必须先建立单链表 建立单链表的常用方法有两种 头插法建表和尾插法建表 头插法建表 从一个空表开始 读取字符数组a中的字符 生成新节点 将读取的数据存放到新节点的数据域中 然后将新节点插入到当前链表的表头上 直到读完
  • 简易分布式爬虫系统

    目录 一 项目介绍 二 系统设计 三 系统核心模块说明 3 1 爬虫功能 3 2 中间件 3 3 数据存储 3 4 数据可视化 四 项目基本配置 关于配置远程连接的具体操作 4 1 Windows下配置redis远程访问 4 2 虚拟机的爬

随机推荐

  • 【面试】嵌入式软件与非嵌入式软件、设备驱动与裸机驱动开发区别

    嵌入式软件开发与非嵌入式软件开发区别 设备驱动开发与裸机驱动开发区别 嵌入式开发与传统单片机开发区别 如果面试遇到这样的问题 三个问题的答案一致 答 我认为嵌入式软件与非嵌入式软件 设备驱动开发与裸机驱动开发 嵌入式开发与传统单片机开发 的
  • 统计一个数的二进制位有多少个 1

    统计一个数的二进制位有多少个 1 转载 统计一个数的二进制位有多少个 1
  • 微信小程序点击事件无效报错Do not have xx handler in current page的问题的解决方法

    最近在做小程序的时候 发现一个神奇的问题 在开发的时候点击事件是没有问题 预览也是没有问题 基础库是1 4 0 当上传之后 体验版发现点击事件无效 报错Do not have xx handler in current page 如下图所示
  • Fiddler Response私人订制

    在客户端接口的测试中 我们经常会需要模拟各种返回状态或者特定的返回值 常见的是用Fiddler模拟各种请求返回值场景 如重定向AutoResponder 请求拦截修改再下发等等 小编在近期的测试中遇到的一些特殊的请求返回模拟的测试场景 借此
  • 2.4.13 Profile虚拟FC卡参数

    最后更新2021 07 24 虚拟FC卡与虚拟SCSI卡的用法类似 同样需要server模式 在vio上 和client模式 在client上 两种虚拟卡 只是虚拟FC卡设置的参数更简单 只有Adapter ID用于表示虚拟槽位号 此卡是否
  • Android开发中截取某字符串

    Android开发中截取某字符串或者路径中的某字符串的方法substr start length substring start end charAt int index indexOf int str int fromIndex subs
  • Scala基础学习之for循环和while循环

    章节目标 掌握分支结构的格式和用法 掌握for循环和while循环的格式和用法 掌握控制跳转语句的用法 掌握循环案例 理解do while循环的格式和用法 1 流程控制结构 1 1 概述 在实际开发中 我们要编写成千上万行代码 代码的顺序不
  • 计算机启动方式如何选择USB启动,u盘启动选择什么模式

    u盘装系统近年来可谓风生水起 用u盘装系统的人越来越多 但是在启动项选择这一步很多用户被难倒 几个usb选项让人眼花缭乱 例如usb hdd usb zip 这么多个usb选项不知u盘启动选择什么模式 今天快启动小编就给大家涨涨姿势 u盘启
  • BGP原理与应用

    BGP原理与应用 原理 BGP基于TCP179端口工作 能够承载上万条路由条目 只传递路由条目 不会暴露AS内的拓扑信息 更加安全 BGP本身不产生路由 而是通过宣告IGP内学习的路由交换路由条目 AS范围 1 65535 64512 65
  • 一些可能会导致Windows 10远程连接失败的常见原因以及如何解决这些问题的建议

    未启用远程桌面连接 在 Windows 10 中 默认情况下 远程桌面连接是禁用的 要启用它 请按 Win R 键打开 运行 对话框 键入 sysdm cpl 然后单击 确定 在 系统属性 窗口中 选择 远程 选项卡 确保选中 允许远程协助
  • Linux各个发行版镜像下载

    Linux各个发行版镜像下载 不断更新 Linux国外的镜像服务器比较多 国内校园网内有不少大学也有Linux镜像服务器 但是在公网下载比较慢 有的还需要用户名密码才能下载 摘一段 Linux一句话问答 给各位看看0001 不推荐使用 哈密
  • yolo毕业设计(车辆识别、行人识别、车牌识别)

    车牌识别视频 车辆识别视频 yolov5车辆识别视频 yolov5 yoloR对比行人车辆识别视频
  • 深度学习GPU显卡的浮点计算性能指标分析

    GPU的计算能力的衡量指标 显存大小 CUDA核心数 计算主频 描述GPU计算能力的指标 计算峰值 2 存储器带宽 其中最为重要的就是GPU的计算峰值 这个在我们进行边缘计算的时候 更加重要 GPU设备的单精度计算能力的理论峰值计算公式 单
  • 区块链学习一:安装 Geth

    区块链技术正在迅速发展 并在各个领域展现出巨大的潜力 如果您对区块链开发感兴趣 那么学习如何安装和配置以太坊客户端 Geth 是一个很好的起点 在本篇文章中 我们将介绍如何使用 DockerHub 上的 Geth Docker 映像来快速安
  • windows 10 输入法切换设置

    windows 10 输入法切换设置 目的 win10系统中 搜狗输入法 英文 美国 输入法 实现二者的快捷键切换 搜索栏 输入 语言设置 查看是否有想用的输入法 没有的话 添加即可 之后 点击右侧 拼写 键入和键盘设置 在点开的界面中 翻
  • 【无标题】ZLM和wvp配置

    ZLM配置 wvp对zlm要求的配置只有一个 具体值随便设置 以9080为例 http port 9080 wvp配置 确保media gt ip为zlm的IP media gt port为刚才配置的9080 其他wvp配置参考配置说明按需
  • linux---ubuntu 更换软件源的方法

    在使用ubuntu操作系统过程中 一般会需要遇到更换软件源的问题 如何更换软件源呢 一 图形化配置 系统配置 推荐 选择 显示应用程序 选择 软件和更新 选择合适的软件源即可 软件和更新界面也可以通过终端指令 software proper
  • Retrofit+Okhttp网络请求:实践纪实

    一 框架使用基本步骤 1 首先是导入依赖 添加网络权限 implementation com squareup retrofit retrofit 2 0 0 beta2 implementation com squareup retrof
  • gcc编译器局部变量在栈中的内存分配

    内存分配 根据系统与编译器的不同 差别很大 之前曾经发现在ubuntu12 04系统gcc 4 63版本编译器 先定义的局部变量在栈中地址低 而后定义的局部变量在栈中地址高 与认知有差别 试了多个系统与编译器 最后发现与linux发行版关系
  • 华为机试题66-配置文件恢复

    描述 有6条配置命令 它们执行的结果分别是 命 令 执 行 reset reset what reset board board fault board add where to add board delete no board at a