题解 | #简单密码#
简单密码
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; }