You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# include <bits/stdc++.h>
using namespace std ;
//https://zhuanlan.zhihu.com/p/265677795
char encoder [ 26 ] = { ' C ' , ' S ' , ' P ' } ; //声明26个长度的字符数组, 只初始化了前三个, 后面23个默认是0, 即 \000
char decoder [ 26 ] ; //声明一个字符数组, 没有进行初始化, 默认值是0,即 \000
string st ;
int main ( ) {
int k = 0 ;
for ( int i = 0 ; i < 26 ; i + + )
if ( encoder [ i ] ! = 0 ) + + k ; //因为有三个进行了初始化, 所以k=3
for ( char x = ' A ' ; x < = ' Z ' ; + + x ) { //x的意思是遍历每一个大写字母
bool flag = true ;
for ( int i = 0 ; i < 26 ; + + i )
if ( encoder [ i ] = = x ) {
flag = false ; //如果在 encoder数组中找到, 则 flag=false,并且停止循环
break ;
}
if ( flag ) { //如果没有找到,那么依次填充到encoder数组中
encoder [ k ] = x ;
+ + k ;
}
}
//根据encoder换算出decoder
for ( int i = 0 ; i < 26 ; + + i ) {
decoder [ encoder [ i ] - ' A ' ] = i + ' A ' ; //这句加密算法是核心
}
//这里应该输出一下decoder,就清楚了,如果是笔试, 那么需要用笔把26个都描述出来
for ( int i = 0 ; i < 26 ; + + i ) {
cout < < " encoder[ " < < i < < " ]= " < < encoder [ i ] < < " " < < endl ;
}
for ( int i = 0 ; i < 26 ; + + i ) {
cout < < " decoder[ " < < i < < " ]= " < < decoder [ i ] < < " " < < endl ;
}
for ( int i = 0 ; i < 26 ; i + + ) {
cout < < char ( ' A ' + i ) < < " : " < < i < < " " ;
}
cout < < endl ;
//输入一个字符串,遍历每一个字符,进行解码
cin > > st ;
for ( int i = 0 ; i < ( int ) st . length ( ) ; + + i )
st [ i ] = decoder [ st [ i ] - ' A ' ] ;
cout < < st ;
return 0 ;
}