题解 | #简单密码#

简单密码

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;
}

全部评论

相关推荐

笑死&nbsp;不是哥们离校了我真要睡街了&nbsp;加上还有几w的贷款&nbsp;不接受我准备去当三和大神
梦想是成为七海千秋:没事,hr这下就有底气了,下次遇到一个不接受的就说,你看,人家这学历都接受了,你凭什么不接受
点赞 评论 收藏
分享
06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
05-14 09:24
青岛工学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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