前言
简单介绍下 feistel算法
输入一个字符串,把它长度分为a,b两段,b段放到前面,a段按照某个规则转换一下写到b段后面
举个例子
输入 2 2 //把长度为4 的字符串分成两段
输入ABCD
此时 CD段提前 AB段各自加三 变成 DE
所以结果应为 CDDE
求问为什么下面这段代码,输出是CDE?
已经很明显了~~~~
代码
#include <iostream>
using namespace std;
void main(){
cout<<"请输入A块长度,B块长度"<<endl;
int length_a,length_b,pos=0;
cin>>length_a>>length_b;
string s;
char res[1000];
cin>>s1;
if(s1.length()!=(a+b)){
cout<<"mistake,length is not equal"<<endl;
return ;
}
for(int i=length_a;i<length_a+length_b-1;i++){
res[pos] = s[i];
pos++;
}
for(i=0;i<length_a-1;i++){
if((s[i]>='a'&&s[i]<'x')||(s[i]>='A'&&s[i]<'X')){
res[pos++]=(char)(s[i]+3);
}
else {
res[pos++]=(char)(s[i]+3-26);
}
}
res[pos] = '\0';
cout<<res<<endl;
}
欢迎大家来一起讨论,我觉得错的比较隐蔽,故贴出来