本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。
变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。
例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。
输入格式 :
输入一行字符,以回车符 '\n'作为 结束符。
输出格式 :
将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,
其他字符按原样输出。
输入样例 :
在这里给出一组输入。例如:
Reold Z123 ?
输出样例 :
在这里给出相应的输出。例如:
sFPME a123 ?
我的想法:输入一串字符,根据规则改为密文
书上的思路:逐个输入字符,改为密文之后输入下一个
第一遍: 字母转换有错
#include<stdio.h>
int main() {
//ch为输入的密码
char ch;
ch = getchar();
while (ch != '\n') {
//字母转换
if (ch >= 'a' || ch <= 'z') {
ch = ch - 'a' + 'b';
}
else if (ch >= 'A' || ch <= 'Z') {
ch = ch - 'A' + 'B';
}
//大小写互换
if (ch >='a' || ch <= 'z') {
ch = ch - 'a' + 'A';
}
else if (ch >= 'A' || ch <= 'Z') {
ch = ch - 'A' + 'a';
}
putchar(ch);
ch = getchar();
}
return 0;
}
怎么设置一组数,让输入的一个数字变成其后的一个数字,且最后一个数变成第一个数字,一直在设置的这组数中循环(问题)
第二遍:后移一位没法实现
#include<stdio.h>
int main() {
//ch为输入的密码
char ch;
ch = getchar();
while (ch != '\n') {
//字母转换
if (ch >= 'a' || ch < 'z') {
ch = ch - 'a' + 'b';
if (ch == 'z') {
ch = 'a';
}
}
else if (ch >= 'A' || ch < 'Z') {
ch = ch - 'A' + 'B';
if (ch == 'Z') {
ch = 'A';
}
}
//大小写互换
if (ch >= 'a' || ch <= 'z') {
ch = ch - 'a' + 'A';
}
else if (ch >= 'A' || ch <= 'Z') {
ch = ch - 'A' + 'a';
}
putchar(ch);
ch = getchar();
}
return 0;
}
第三遍:答案错误;过程繁琐,把后移一位和大小写转换分开了,合并在一起会效率高一点(吧
#include<stdio.h>
int main() {
char ch;
ch = getchar();
while (ch != '\n') {
//后移一位
if (ch >= 'a' && ch <= 'z') {
if (ch == 'z') {
ch = ch - 'z' + 'a';
}
else {
ch = ch + 1;
}
}
if (ch >= 'A' && ch <= 'Z') {
if (ch == 'Z') {
ch = ch - 'Z' + 'A';
}
else {
ch = ch + 1;
}
}
//更换大小写
if (ch >= 'a' || ch <= 'z') {
ch = ch - 'a' + 'A';
}
else if (ch >= 'A' || ch <= 'Z') {
ch = ch - 'A' + 'a';
}
putchar(ch);
ch = getchar();
}
return 0;
}
第四遍:改成简略版本了,但还是有问题------大小写转换时+-弄反了
而且zZ的换完之后没有大小写转换
#include<stdio.h>
int main() {
char ch;
ch = getchar();
while (ch != '\n') {
if (ch >= 'a' && ch < 'z') {
ch = ch + 32 + 1;
}
else if (ch == 'z') {
ch = 'a';
}
else if (ch >= 'A' && ch < 'Z') {
ch = ch - 32 + 1;
}
else if (ch == 'Z') {
ch = 'A';
}
putchar(ch);
ch = getchar();
}
return 0;
}
第五遍:这才是正确的
#include<stdio.h>
int main() {
char ch;
ch = getchar();
while (ch != '\n') {
if (ch >= 'a' && ch < 'z') {
ch = ch - 32 + 1;
}
else if (ch == 'z') {
ch = 'A';
}
else if (ch >= 'A' && ch < 'Z') {
ch = ch + 32 + 1;
}
else if (ch == 'Z') {
ch = 'a';
}
putchar(ch);
ch = getchar();
}
return 0;
}