题解 | #配置文件恢复#

配置文件恢复

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

//多种确定命令采用固定数组存储(对于空格采用两个数组分开判断),用cmd_out函数表达对应输出内容(利用数组下标做switch),通过对字符串长度>16初筛;判断是否有空格及空格位置,作为字符串比较的分隔方式,strncmp对字符串进行比对,存储下标进行输出。int strncmp(const char *str1, const char *str2, size_t num):两个比较字符串的指针,一个无符号数代表比较的字符个数,返回类型为一个大于零小于零或等于零的整型。
#include <stdio.h>
#include <string.h>

char *cmd1[6]={"reset","reset","board","board","reboot","backplane"};
char *cmd2[6] = {"no use","board","add","delete","backplane","abort"};

void cmd_out(int index) //各命令对应输出
{
    switch(index)
    {
        case 0:
            printf("reset what\n");
            break;
        case 1:
            printf("board fault\n");
            break;
        case 2:
            printf("where to add\n");
            break;
        case 3:
            printf("no board at all\n");
            break;
        case 4:
            printf("impossible\n");
            break;
        case 5:
            printf("install first\n");
            break;
        default:
            printf("unknown command\n");
            break;
    }
}

int main() {
    char in[28] = {'\0'};
    while( gets(in) ) //输入字符串
    {
        int len = strlen(in);
        if(len>16)
        {
            printf("unknown command\n"); //命令最长为16个字符,超过则为错误,退出当前if判断及之后,执行下一次while循环
            continue;
        }
        int blank_flag = 1, pos;
        for(int i=0; i<len; i++) //blank_flag判断是否有空格,pos为空格的位置
        {
            if(in[i] == ' ') 
            {
                blank_flag = 0;
                pos = i;
                break;
            }
        }
        //输入一个字符串的情况,即空格标志为1(无空格)
        if(blank_flag)
        {
            if(strncmp(in, cmd1[0], len) == 0) //判断字符串与命令字符串的内容是否相等
            {
                printf("reset what\n"); //一个字符串的命令只有reset
            }
            else {    
                printf("unknown command\n");
            }
        }
        //输入两个字符串的情况
        else {    
            int cnt = 0, index;
            for(int i=1; i<6; i++) //两个字符串的从第二个开始
            {
                if(strncmp(in, cmd1[i], pos) == 0 && strncmp(in+pos+1, cmd2[i],len-pos-1) == 0)
                {
                    cnt++;//=1表示仅一次相等,有效,超过则无效
                    index = i;//存储当前命令字位置
                }
            }
            if(cnt==1)
                cmd_out(index);
            else
                printf("unknown command\n");
        }
    }
    return 0;
}

全部评论

相关推荐

无感c:春招不是早就结束了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务