一、描述
规定这样一种密码的变换方法:
∙ ∙对于密码中的小写字母,参考九键手机键盘,将它们映射为对应的数字,具体地,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

京公网安备 11010502036488号