题目描述
外星人为自己的标点符号设计了一套编码系统,编码规则如下:
- [ 的编码为010
- ] 的编码为101
- < 的编码为00
- > 编码为11
-
- 的编码为011
-
- 编码为100
根据这套编码规则,任意长的标点符号序列可以编码成 01 序列,例如++>[-<]编码后变成了0110111101010000101。
可以确定的是,符合编码规则的 01 序列只能对应一种唯一的符号序列。给定一串符合编码规则 01 序列,请还原它对应的符号序列。
输入
若干 01 表示输入。
输出
若干个符号表示输出。
样例输入
0110111101010000101
样例输出
++>[-<]
提示
设 b 表示输入数据的长度,则
- 30% 的数据,2≤b≤10
- 60% 的数据,2≤b≤2000
- 100% 的数据,2≤b≤300000
- 提示 使用字符串暴力即可,也可使用字符串再用map优化
分析
本题为关于字符串的题目
由于输入不知道有几位,所以要用while循环
然后定义一个i,用来实现for循环的功能
最后再while循环里编六个判断就行了
记得每个判断i都要变化!
代码如下:
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
cin>>a;
int l=a.size();
int i=0;
while(i<=l-1){
if(a[i]=='0'&&a[i+1]=='1'&&a[i+2]=='0'){
cout<<'[';
i=i+3;
}else if(a[i]=='1'&&a[i+1]=='0'&&a[i+2]=='1'){
cout<<']';
i=i+3;
}else if(a[i]=='0'&&a[i+1]=='0'){
cout<<'<';
i=i+2;
}else if(a[i]=='1'&&a[i+1]=='1'){
cout<<'>';
i=i+2;
}else if(a[i]=='0'&&a[i+1]=='1'&&a[i+2]=='1'){
cout<<'+';
i=i+3;
}else if(a[i]=='1'&&a[i+1]=='0'&&a[i+2]=='0'){
cout<<'-';
i=i+3;
}
}
return 0;
}