10.26C语言学习记录

本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。
变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。
例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。
输入格式 :
输入一行字符,以回车符 '\n'作为 结束符。
输出格式 :
将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,
 其他字符按原样输出。
输入样例 :
在这里给出一组输入。例如:
Reold  Z123 ?
输出样例 :
    在这里给出相应的输出。例如:
    sFPME  a123 ?

我的想法:输入一串字符,根据规则改为密文
书上的思路:逐个输入字符,改为密文之后输入下一个
第一遍: 字母转换有错
#include<stdio.h>
int main() {
    //ch为输入的密码
    char ch;
    ch = getchar();

    while (ch != '\n') {
        //字母转换
        if (ch >= 'a' || ch <= 'z') {
            ch = ch - 'a' + 'b';
        }
        else if (ch >= 'A' || ch <= 'Z') {
            ch = ch - 'A' + 'B';
        }

        //大小写互换
        if (ch >='a' || ch <= 'z') {
            ch = ch - 'a' + 'A';
        }
        else if (ch >= 'A' || ch <= 'Z') {
            ch = ch - 'A' + 'a';
        }

        putchar(ch);
        ch = getchar();
    }
    

    return 0;
}

怎么设置一组数,让输入的一个数字变成其后的一个数字,且最后一个数变成第一个数字,一直在设置的这组数中循环(问题)
 第二遍:后移一位没法实现
#include<stdio.h>
int main() {
    //ch为输入的密码
    char ch;
    ch = getchar();

    while (ch != '\n') {
        //字母转换
        if (ch >= 'a' || ch < 'z') {
            ch = ch - 'a' + 'b';
            if (ch == 'z') {
                ch = 'a';
            }
        }
        else if (ch >= 'A' || ch < 'Z') {
            ch = ch - 'A' + 'B';
            if (ch == 'Z') {
                ch = 'A';
            }
        }

        //大小写互换
        if (ch >= 'a' || ch <= 'z') {
            ch = ch - 'a' + 'A';
        }
        else if (ch >= 'A' || ch <= 'Z') {
            ch = ch - 'A' + 'a';
        }

        putchar(ch);
        ch = getchar();
    }


    return 0;
}
第三遍:答案错误;过程繁琐,把后移一位和大小写转换分开了,合并在一起会效率高一点(吧
#include<stdio.h>
int main() {

    char ch;
    ch = getchar();
    while (ch != '\n') {
        //后移一位
        if (ch >= 'a' && ch <= 'z') {
            if (ch == 'z') {
                ch = ch - 'z' + 'a';
            }
            else {
                ch = ch + 1;
            }
        }
        if (ch >= 'A' && ch <= 'Z') {
            if (ch == 'Z') {
                ch = ch - 'Z' + 'A';
            }
            else {
                ch = ch + 1;
            }
        }
        //更换大小写
        if (ch >= 'a' || ch <= 'z') {
            ch = ch - 'a' + 'A';
        }
        else if (ch >= 'A' || ch <= 'Z') {
            ch = ch - 'A' + 'a';
        }

        putchar(ch);
        ch = getchar();
    }


    return 0;
}
第四遍:改成简略版本了,但还是有问题------大小写转换时+-弄反了
 而且zZ的换完之后没有大小写转换

#include<stdio.h>
int main() {

    char ch;
    ch = getchar();
    while (ch != '\n') {
        if (ch >= 'a' && ch < 'z') {
            ch = ch + 32 + 1;
        }
        else if (ch == 'z') {
            ch = 'a';
        }
        else if (ch >= 'A' && ch < 'Z') {
            ch = ch - 32 + 1;
        }
        else if (ch == 'Z') {
            ch = 'A';
        }
        putchar(ch);
        ch = getchar();
    }


    return 0;
}
第五遍:这才是正确的
#include<stdio.h>
int main() {

    char ch;
    ch = getchar();
    while (ch != '\n') {
        if (ch >= 'a' && ch < 'z') {
            ch = ch - 32 + 1;
        }
        else if (ch == 'z') {
            ch = 'A';
        }
        else if (ch >= 'A' && ch < 'Z') {
            ch = ch + 32 + 1;
        }
        else if (ch == 'Z') {
            ch = 'a';
        }
        putchar(ch);
        ch = getchar();
    }


    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值