题目描述:
有一个特殊的五键键盘,上面有A、Ctrl-C、Ctrl-X、Ctrl-V、Ctrl-A A键在屏幕上输出一个字母A,Ctrl-C将当前所选的字母复制到剪贴板,Ctrl-X将当前选择的字母复制到剪贴板并清空所选择的字母,Ctrl-V将当前剪贴板的字母输出到屏幕,Ctrl-A选择当前屏幕中所有字母
条件如下:
- 剪贴板初始为空
- 新的内容复制到剪贴板会覆盖原有内容
- 当屏幕中没有字母时,Ctrl-A无效
- 当没有选择字母时Ctrl-C、Ctrl-X无效
- 当有字母被选择时A和Ctrl-V这两个输出功能的键,会先清空所选的字母再进行输出
- 给定一系列键盘输入,输出最终屏幕上字母的数量
输入描述:
- 输入为一行
- 为简化解析用数字12345分别代替A、Ctrl-C、Ctrl-X、Ctrl-V、Ctrl-A的输入
- 数字用空格分割
输出描述:
- 输出一个数字为屏幕上字母的总数量
- 示例一
- 输入:1 1 1
- 输出:3
- 示例二
- 输入:1 1 5 1 5 2 4 4
- 输出:2
#include#include #include using namespace std; int main() { char c; vector v;//记录输入值 vector v2;//面板 vector v3;//剪切板 while (cin.get(c)) { if (c == 'n') break; else if (c == ' ') continue; v.push_back(c); } int flagCA = 0; for (vector ::iterator iter = v.begin(); iter != v.end(); iter++) { switch (*iter) { case '1': //A if (flagCA != 1) { v2.push_back('A'); flagCA = 0; } else { v2.clear(); v2.push_back('A'); flagCA = 0; } break; case '2': //C if (v2.size()!= 0&& flagCA!=0) { v3 = v2; } break; case '3': //x if (v2.size() != 0 && flagCA != 0) { v3 = v2; v2.clear(); } break; case '4': //V if ((v3.size()!=0)&&(flagCA != 0)) { v2 = v3; flagCA = 0; } else if (v3.size() != 0) { v2.insert(v2.end(),v3.begin(), v3.end()); flagCA = 0; } break; case '5': //A flagCA = 1; break; default: break; } } cout << "totolly number is " << v2.size(); return 0; }



