本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:
输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出替换完成后的字符串。
输入样例:
Only the 11 CAPItaL LeTtERS are replaced.
输出样例:
Lnly the 11 XZKRtaO OeGtVIH are replaced.
题解:
#include<stdio.h>
int main ()
{
char str [81];
/*
char original_letter [] = { 字母参照表
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
*/
char correspond_letter [] = {
'Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A'
}; //此处也可以循环赋值数组
int i = 0; //循环变量
/*循环给correspond_letter数组赋值倒序的字母(如需用这个方法上面定义的char correspond_letter要注释掉重新定义)*/
// int j = 90;
// char correspond_letter [26];
// for (i = 0; i < 26; i++)
// correspond_letter [i] = j--;
gets (str); //输入字符串到str数组里面
int temp; //定义temp为该大写字母离A多少位
/*循环替换大写字母*/
for (i = 0; str [i] != '\0' ; i++)
{
if (str [i] >= 'A' && str [i] <= 'Z')
{
temp = (int)str[i] - 'A'; //相差多少位就是对应逆序后的字母(correspond_letter数组存放的是逆序的大写字母)
str [i] = correspond_letter [temp]; //赋值
}
}
puts (str); //输出str字符串
return 0;
}
/*
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBA
*/
二、
/*方法二:*/
// #include<stdio.h>
// int main ()
// {
// char str [81];
// int i = 0; //循环变量
// gets (str); //输入字符串到str数组里面
// /*循环替换大写字母*/
// for (i = 0; str [i] != '\0' ; i++)
// {
// if (str [i] >= 'A' && str [i] <= 'Z')
// {
// str [i] = 'Z' - ( (int)str[i] - 'A'); //找到大写字母直接赋值替换,最后一个大写字母ascii码90减去 A到str[i]的位数 就是逆序字母的ASCII码
// }
// }
// puts (str); //输出str字符串
// return 0;
// }