电报加密C语言版(字符串整体后移一位的方法)

题目 1042: [编程入门]电报加密

时间限制: 1Sec 内存限制: 128MB 

题目描述

输入一行电报文字,将字母变成其下一字母(如’a’变成’b’……’z’变成’a’其它字符不变)。

输入格式

一行字符

输出格式

加密处理后的字符

样例输入

a b

样例输出

b c

解题思路

让这些字符向后移一位就可以了,边界z向后移动一位就是重新开始这个循环,也就是重新重a开始

a[i] = (a[i] - 'a') % 26 + 'a';

这句代码的意思就是,通过取模的方式来知道,它是26个字母中的第几位,
在加上一个'a'就变成了原来的数了

而可以进一步改进成这个样子:

a[i] = (a[i] - 'a' + 1) % 26 + 'a';

这样表示的是 a[i] - 'a' 先向前移动 一位 然后在 取模 ,
这样的话取模的结果就是已经移动一位后的结果了,之后再加'a',
就变了'a'移动一位后的结果了

题解代码

#include <stdio.h>
#include <string.h>
void fun(char a[])//向后移动一位
{
    for (int i = 0; i < strlen(a); i++)
        if (a[i] >= 'a' && a[i] <= 'z')
            a[i] = (a[i] - 'a' + 1) % 26 + 'a';
        else if (a[i] >= 'A' && a[i] <= 'Z')
            a[i] = (a[i] - 'A' + 1) % 26 + 'A';
}
 
int main()
{
    char a[101];
    gets(a);
    fun(a);
    puts(a);
    return 0;
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值