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