源代码在评论区
我改完之后的代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
string m = "English"; // 当前模式
bool s = true; // shift是否按下
bool c = false; // 大写锁定
string i; // 当前输入(中文模式下存储)
vector<string> v; // 输入序列
for (int j = 0; j < n; j++) {
string k;
cin >> k;
v.push_back(k);
}
string o; // 输出
for (int j = 0; j < n; j++) {
string k = v[j];
if (k == "ShiftDown") {
s = true;
if (j + 1 < n && v[j + 1] == "ShiftUp") {
if (m == "English") {
m = "Chinese";
} else {
m = "English";
o += i;
i = "";
}
j++;
} else {
c = !c;
}
} else if (k == "ShiftUp") {
if (s == true) {
c = !c;
}
s = false;
} else if (k == "CapsLock") {
c =!c;
} else if (k == "Esc") {
i = "";
} else if (k == "Enter") {
if (i.size() > 0) {
o += i;
i = "";
} else {
o += '\n';
}
} else if (k == "Backspace") {
if (i.size() > 0) {
i.pop_back();
} else if (o.size() > 0) {
o.pop_back();
}
} else {
if (m == "Chinese") {
i += k;
} else {
if (s ^ c) {
o += toupper(k[0]);
} else {
o += tolower(k[0]);
}
}
}
}
cout << o << endl;
return 0;
}
输出: acYA
为什么会这个样子?!