电报加密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 
#include 
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;
}

你可能感兴趣的:(C语言网基础算法题,算法,c语言)