|
之前有网友发了这个程序觉得挺好玩的,放话说C++更容易实现,所以重新写了个C++版本。
代码量确实比C少很多,性能应该会比C高(我猜的),已移植了Linux/Windows/Mac os版本,详见附件。
- #include <iostream>
- #include <string>
- #include <map>
- #include <windows.h>
- using namespace std;
-
- map<int,int> h;
- string t[]={"富强","民主","文明","和谐","自由","平等","公正","法治","爱国","敬业","诚信","友善"};
- void init(){
- SetConsoleTitle("[C++] 社会主义核心价值观的加解密工具 -by JuncoJet");
- for(int i=0;i<12;i++){
- h[*(int*)t[i].c_str()]=i;
- }
- }
- void encode(string s){
- for(int i=0;i<(int)s.length();i++){
- char vv,v=vv=s.c_str()[i];
- for(int x=1;x>=0;x--){
- vv=v>>(x*4);
- int q=vv&0xf;
- if(q>10){
- cout<<t[11]<<t[q-11];
- }else{
- cout<<t[q];
- }
- }
- }
- cout<<endl<<endl;
- }
- void decode(string s){
- int c=0,f=0,l=(int)s.length();
- char *p=new char[l/4/2+1]();
- for(int i=0;i<l;i+=4){
- int q=h[*(int*)&(s.c_str()[i])];
- if(f){
- q+=11;
- f--;
- }else if(q==11){
- f++;
- continue;
- }
- p[c/2]|=q<<((c+3)%2*4);
- c++;
- }
- cout<<p<<endl<<endl;
- delete []p;
- }
- void main(){
- int f;
- init();
- for(;;){
- cout<<"输入功能 1.加密 2.解密:";
- while(!(cin>>f)){
- cin.clear();
- cin.ignore();
- }
- if(f>2||f<1){
- cout<<"输入有误,重新输入"<<endl;
- continue;
- }
- cout<<endl<<"现在开始"<<(f>1?"解密":"加密")<<":"<<endl;
- string s;
- cin>>s;
- if(f>1){
- decode(s);
- }else{
- encode(s);
- }
- }
- }
复制代码
|
|