#include<iostream>
#include<string>
using namespace std;
int main()
{
string str,str1;
char word = 'a',word1='A';
for (int i = 0;i <=25 ;i++)
{
str1 += word1;
str += word;
word++;
word1++;
}
str += str;//获得a到z+a到z
str1 += str1;//获得A到Z+A到Z
cout << str << " " << str1 << endl;
string k, C,ck;//k是密钥,C是密文,ck用来存k扩大几倍后的东东
cin >> k >> C;
int lk = k.size();
int lc = C.size();
for (int i = 0;i < lk;i++)
{
k[i] = tolower(k[i]);//让k全变小写
}
for (int i=0;i<=lc/lk;i++)
{
ck += k;
}
for (int i = 0;i < lc;i++)//将C一个一个转成明文
{
for (int j = 26;j <= 41;j++)
{
if (C[i] == str[j])
{
C[i] = str[j - ck[i] + 97];
}
if (C[i] == str1[j])
{
C[i] = str1[j - ck[i] + 97];
}
}
}
for (int i = 0;i < lc;i++)
{
cout << C[i];
}
return 0;
}
更新一下,debug成功了。
我发现我26+25算成了41。。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str, str1;
char word = 'a', word1 = 'A';
for (int i = 0;i <= 25;i++)
{
str1 += word1;
str += word;
word++;
word1++;
}
str += str;//获得a到z+a到z
str1 += str1;//获得A到Z+A到Z
string k, C, ck;//k是密钥,C是密文,ck用来存k扩大几倍后的东东
cin >> k >> C;
int lk = k.size();
int lc = C.size();
for (int i = 0;i < lk;i++)
{
k[i] = tolower(k[i]);//让k全变小写
}
for (int i = 0;i <= lc / lk;i++)
{
ck += k;
}
for (int i = 0;i < lc;i++)//将C一个一个转成明文
{
for (int j = 26;j <= 51;j++)
{
if (C[i] == str[j])
{
C[i] = str[j - ck[i] + 97];
break;
}
if (C[i] == str1[j])
{
C[i] = str1[j - ck[i] + 97];
break;
}
}
}
for (int i = 0;i < lc;i++)
{
cout << C[i];
}
return 0;
}