输出英文字母的前驱和后继字母
输出英文字母的前驱和后继字母
从键盘输入一个英文字母,输出其前驱字母(即前一个字母)、后继字母(即后一个字母)及其ASCII值。比如输入的字母是b,则前驱字母是a,后继字母是c。而如果输入的字母是a,则前驱字母是z,后继字母是b;如果输入的字母是z,则前驱字母是y,后继字母是a。
大写字母的前驱后继字母求法与小写字母相同。
输入格式: 输入一个英文字母(大写或小写字母)。
输出格式: 第一行输出该字母的前驱字母及其ASCII值,第二行输出后继字母及其ASCII值,字母与ASCII值之间用一个空格分隔。
int main()
{
char ch;
scanf("%c",&ch);
if(ch>='a'&&ch<='z')
{
//要了解如何输出前驱,请先看如何输出后继
//输出前驱时,由于0减去1为-1,对-1取26的模,结果还是为-1
//为了避免出现-1,把原编号加上26,再对26取模就可以了
printf("%c %d\n",'a'+(ch+26-'a'-1)%26,'a'+(ch+26-'a'-1)%26);
//输出后继字母
//由于字母z的后继要变成a,故采用循环的方式,设字母a编号为0,则z的编号为25
//采用取模的方式可以使得字母可以循环输出,由于是26个字母,故取模26
//要把a-z的ASCII码变成编号0至25,用ASCII码减去'a'即可
//要把a重新变成ASCII码,重新加上'a'即可
printf("%c %d",'a'+(ch-'a'+1)%26,'a'+(ch-'a'+1)%26);
}
else
{
printf("%c %d\n",'A'+(ch+26-'A'-1)%26,'A'+(ch+26-'A'-1)%26);
printf("%c %d",'A'+(ch-'A'+1)%26,'A'+(ch-'A'+1)%26);
}
return 0;
}