有注释的,希望大佬帮我看看
#include<bits/stdc++.h>
using namespace std;
string s;
int ctt,num[200000];//存2打头的数字结果
char final[200000];//储存结果
int numcal(int ss,int z){//计算从ss到z的十进制值
int base=pow(2,z-ss),ans=0;
for(int i=ss;i<=z;++i){
ans+=(s[i]-'0')*base;
base/=2;
}
return ans;
}
int main(){
cin>>s;
int sign=0,l,r;
int len=s.length();
for(int i=0;i<len;++i){//检查输入里有没有奇怪的东西
if(s[i]!='0'&&s[i]!='1'){
cout<<"Error";
return 0;
}
}
if(len%8!=0){//不满足8个单元的也不对
cout<<"Error";
return 0;
}
else{
int cur=len/8;
for(int i=1;i<=cur;++i){//8i-8----------------8i-1表示每个单元的头到尾(左闭右闭)
if(s[8*i-8]=='1'&&s[8*i-7]=='0'&&s[8*i-6]=='1'){//101的读字母
int num=numcal(8*i-5,8*i-1);
if(num>25||sign){//大于25或者上一个是一个0打头的单位就错误
cout<<"Error";
return 0;
}
char temp=num+'A';
final[++ctt]=temp;
}
else if(s[8*i-8]=='1'&&s[8*i-7]=='1'&&s[8*i-6]=='1'){//111空格
if(sign){
cout<<"Error";
return 0;
}
final[++ctt]=' ';
}
else if(s[8*i-8]=='0'){//数字
if(sign==0){//第一个数字
l=numcal(8*i-7,8*i-1);
sign=1;//标记一下
}
else{//第二个数字
r=numcal(8*i-7,8*i-1);
sign=0;//归零
l/=2;r/=2;
num[++ctt]=l+r;
}
}
else{
cout<<"Error";
return 0;
}
}
}
for(int i=1;i<=ctt;++i){//输出
if(isalpha(final[i])||final[i]==' ') cout<<final[i];
else{
cout<<num[i];
}
}
return 0;
}