题解 | 华为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 文章被收录于专栏
机试的题解