啊我的舍友真牛,思路好强好棒,受到她启发写出来了这题。
#利用ASCII码值进行数据类型转换,直接省略掉定义数组的问题
#再用对照表解决数据减出65的窘境
#直接用强制类型转换 得到字符数组
#注意空格的ASCII码值是32 “!”是33
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
using namespace std;
int main() {
int a, b=0;//a是记录数字的 向前推几位;b是记录一共有多少个字符
char read[25] = {0};
cin.getline(read, 25);
for (int i = 0; i < 25;i++) {
if (read[i]>=48&&read[i]<=57) {
a = read[i] - 48;
b=i+1 ;//+1是因为会有一个空格出现
}
}
for (int i = 0; i < b-1;i++) {
if (read[i]>=65+a &&read[i]<=90) {
cout << static_cast<char>(read[i] - a);
}
else if (read[i] <= 47) {
cout << read[i];
}
else {
cout << static_cast<char>(read[i] +26-a);//-a会导致ASCII码跳出只有字母的范围
}
}
}
我舍友的思路 (看到48和57我就明白了)