题解 | 华为HJ21简单密码

简单密码

https://www.nowcoder.com/practice/7960b5038a2142a18e27e4c733855dac

一、描述

规定这样一种密码的变换方法:

∙ ∙对于密码中的小写字母,参考九键手机键盘,将它们映射为对应的数字,具体地,abc 对应数字 2 、def 对应数字 3 、ghi 对应数字 4 、jkl 对应数字 5 、mno 对应数字 6 、pqrs 对应数字 7 、tuv 对应数字 8 、wxyz 对应数字 9 ;

∙ ∙对于密码中的大写字母,先将其转换为小写,然后向后移动一位,即 Z 转换为 a ,A 转换为 b ,B 转换为 c ,⋯⋯ ,Y 转换为 z ,Z转换为 a 。

∙ ∙对于密码中的数字,保持不变。

现在,请你将给定的密码按照上述规则进行变换。

输入描述:

在一行上输入一个长度为 1≦length(s)≦100 的字符串 s ,代表给定的密码。

输出描述:

在一行上输出一个字符串,代表变换后的密码。

示例1

输入:

NowCoder123

输出:

o69d6337123

二、代码实现(MISRA-C标准)

#include <stdio.h>
#include <string.h>
/*********************************************************************************************/    
/* @author Senky                                                                             */
/* @date 2025.03.23                                                                          */
/* @par url https://www.nowcoder.com/creation/manager/columnDetail/mX8Oem                    */
/* 本题将以需求的方式实现,并且遵循MISRA-C标准,因此编码风格和实现方式有所不同                     */
/* 如果这是一个客户需求,那么最好是定义大写、数字、小写三类密码的[转换方法]                        */
/* 随时保持可扩展性和复用性,因为每种[转换方法]可能会跟随项目进度更改                              */
/*********************************************************************************************/ 

#define TRANSFER_FATAL_CHAR     ('\0')
#define TRANSFER_TABLE_MAX      (10)
/*********************************************************************************************/ 
/*  char_g_TransferLetterSma: Tansfer small letter                                           */
/*********************************************************************************************/ 
/* Input:  --> char_a_ch : The letters before conversion.                                    */
/* return: <-- char_t_res : Converted letters.                                               */
/*********************************************************************************************/ 
char char_g_TransferLetterSma(char char_a_ch)
{
    char char_t_res;
    char_t_res = TRANSFER_FATAL_CHAR;
    switch(char_a_ch)
    {
        case 'a':
        case 'b':
        case 'c':
        char_t_res = '2';
        break;

        case 'd':
        case 'e':
        case 'f':
        char_t_res = '3';
        break;

        case 'g':
        case 'h':
        case 'i':
        char_t_res = '4';
        break;

        case 'j':
        case 'k':
        case 'l':
        char_t_res = '5';
        break;

        case 'm':
        case 'n':
        case 'o':
        char_t_res = '6';
        break;

        case 'p':
        case 'q':
        case 'r':
        case 's':
        char_t_res = '7';
        break;

        case 't':
        case 'u':
        case 'v':

        char_t_res = '8';
        break;

        case 'w':
        case 'x':
        case 'y':
        case 'z':
        char_t_res = '9';
        break;

        default:
        /* Printf LOG */
        printf("Fatal Error : The Small Letter[%c] is Not in table!",char_a_ch);
        break;
    }
    return char_t_res;
}

/*********************************************************************************************/ 
/*  char_g_TransferLetterBig: Tansfer Big letter                                             */
/*********************************************************************************************/ 
/* Input:  --> char_a_ch : The letters before conversion.                                    */
/* return: <-- char_t_res : Converted letters.                                               */
/*********************************************************************************************/ 
char char_g_TransferLetterBig(char char_a_ch)
{
    char char_t_res;
    if (char_a_ch == 'Z') 
    {
        char_t_res = 'a';
    }
    else 
    {
        char_t_res = (char_a_ch + 32 + 1);
    }
    return char_t_res;
}

/*********************************************************************************************/ 
/*  char_g_TransferLetterNum: Tansfer number                                                 */
/*********************************************************************************************/ 
/* Input:  --> char_a_ch : The number before conversion.                                     */
/* return: <-- char_t_res : Converted number.                                                */
/*********************************************************************************************/ 
char char_g_TransferLetterNum(char char_a_ch)
{
    char char_t_res;
    char_t_res = char_a_ch;

    return char_t_res;
}
/*********************************************************************************************/ 
/*  vd_g_solusion:Solusion Fuction                                                           */
/*********************************************************************************************/ 
/* Input:  --                                                                                */
/* return: --                                                                                */
/*********************************************************************************************/ 
void vd_g_Solution(void)
{
    char  char_p_input[100];
    char  char_p_output[100];
    char  char_t_input_length;
    char  char_t_index;

    scanf("%s",char_p_input);
    strcpy(char_p_output, char_p_input);

    char_t_input_length = strlen((const char *)char_p_input);

    for (char_t_index = 0; char_t_index < char_t_input_length; char_t_index++) 
    {
        if ((char_p_input[char_t_index] >= 'a') &&
            (char_p_input[char_t_index] <= 'z'))
        {
            char_p_output[char_t_index] = char_g_TransferLetterSma(char_p_input[char_t_index]);
        }
        else if ((char_p_input[char_t_index] >= 'A') &&
                 (char_p_input[char_t_index] <= 'Z'))
        {
            char_p_output[char_t_index] = char_g_TransferLetterBig(char_p_input[char_t_index]);
        }
        else if ((char_p_input[char_t_index] >= '0') &&
                 (char_p_input[char_t_index] <= '9'))
        {
            char_p_output[char_t_index] = char_g_TransferLetterNum(char_p_input[char_t_index]);
        }
        else 
        {
            /* Printf LOG */
            printf("Fatal Error : The Password is Invalid!");
        }
    }
    printf("%s", char_p_output);
}

/*********************************************************************************************/ 
/*  main : Main Fuction                                                                      */
/*********************************************************************************************/ 
/* Input:  --                                                                                */
/* return: 0                                                                                 */
/*********************************************************************************************/ 
int main() 
{
    vd_g_Solution();
    return 0;
}

①清晰的变量名:简单明了的上下文很容易阅读

②恰到好处的LOG输出:精准的LOG输出可以快速定位BUG

#MISRA##HJ21#
华为-HJ 文章被收录于专栏

机试的题解

全部评论

相关推荐

喜欢飞来飞去的雪碧在刷代码:可以试一试字节
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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