题解 | #简单密码#
简单密码
https://www.nowcoder.com/practice/7960b5038a2142a18e27e4c733855dac
解题思路:
先设置一个字典存a-z对应的数字
然后在循环中判断每次取的字符是否是在A-Z的范围,如果是将字符的ASCII+33得到对应小写向后移动一位,Z->a单独设置就行
如果完成了大写到小写的转换就用continue把下面的小写字母转数字的for跳过,最后通过for循环循环输出就可以。
ps:为什么不用printf("%s",arry);直接输出整个数组
是因为我用printf("%s",arry);在有一个测试用例中始终会多输出一个回车,最后只能改成通过for循环循环输出。
如果有知道原因的大佬还请指点一下
#include <stdio.h>
int main() {
char lib[26][2]={{'a','2'},{'b','2'},{'c','2'},{'d','3'},
{'e','3'},{'f','3'},{'g','4'},{'h','4'},{'i','4'},{'j','5'},
{'k','5'},{'l','5'},{'m','6'},{'n','6'},{'o','6'},{'p','7'},
{'q','7'},{'r','7'},{'s','7'},{'t','8'},{'u','8'},{'v','8'},
{'w','9'},{'x','9'},{'y','9'},{'z','9'}};
char arry[100]={'\0'};
int i=0,num=0;
while(scanf("%c",&arry[num])!=EOF)
{
if(arry[num]=='\n')
{
break;
}
num++;
}
for(i=0;i<num;i++)
{
//if((int)arry[i]>=(int)'A'&&(int)arry[i]<=(int)'Z')
if(arry[i]>='A'&&arry[i]<='Z')
{
if(arry[i]=='Z')
{
arry[i]='a';
}
else
{
arry[i]+=33;
}
continue;
}
for(int j=0;j<26;j++)
{
if(arry[i]==lib[j][0])
{
arry[i]=lib[j][1];
}
}
}
for(i=0;i<num;i++)
{
printf("%c",arry[i]);
}
return 0;
}
查看10道真题和解析