题目描述:
有一个特殊的五键键盘,上面有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 <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
char c;
vector<char> v;//记录输入值
vector<char> v2;//面板
vector<char> v3;//剪切板
while (cin.get(c)) {
if (c == '\n')
break;
else if (c == ' ')
continue;
v.push_back(c);
}
int flagCA = 0;
for (vector<char>::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;
}