输入keyword, 计算出矩阵的“列数”;
输入plaintext,计算出整个字符串的长度,继而计算出矩阵的行数; 一直错在这里,不能简单的plaintext.size() / keyword.size()
找出keyword中最小的且还没储存的列数,储存字符;
输出结果
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
using namespace std;
int main()
{
string keyword;//输入keyword
while(cin >> keyword && keyword != "THEEND")
{
bool flag[10];//标记是否已访问
memset(flag, 0, sizeof(flag));//初始化未访问
int rows;//矩阵行数
vector<char> column[10];
string plaintext;
cin >> plaintext;//输入明文
if(plaintext.size() % keyword.size() == 0)
rows = plaintext.size() / keyword.size();
else
rows = plaintext.size() / keyword.size() + 1;//文字长度除以列数,得行数
int start = 0;
for(int i = 0; i < keyword.size(); i++)
{
int minColumn;
for(int n = 0; n < keyword.size(); n++)//找最小的列
{
if(!flag[n])
{
minColumn = n;
break;
}
}
for(int j = 0; j < keyword.size();j++)
{
if(keyword[minColumn] > keyword[j] && !flag[j])//表示第J列仍未被访问
{
minColumn = j;
}
}
flag[minColumn] = true;//已访问
for(int k = 0; k < rows; k++)
{
column[minColumn].push_back(plaintext[start]);
start++;
}
}
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < keyword.size(); j++)
{
cout << column[j][i];
}
}
cout << endl;
}
return 0;
}