Шифр транспонирования строк с использованием дополнительной колонки

Привет, ребята. Я пытаюсь создать программу, которая принимает пользовательский ввод и отображает его в 2d массив, а затем шифрует его, смешивая столбцы. Например, если пользователь вводит «my name is fred», программа создает массив размером 3×6, заполняющий последний столбец y, а оставшиеся пустые пробелы x, так что это должно быть что-то вроде

mynamy
eisfry
edxxxx

вместо этого я заканчиваю с

mynam
eisfr
edxx

#include <iostream>
#include<cctype>
#include<algorithm>
using namespace std;

main(){
string input;

cout << "Enter information to be encrypted" << endl;
getline(cin,input);
input.erase(std::remove (input.begin(), input.end(), ' '), input.end());

int columns = 6;
int rows;
if (input.size() <= 5){
rows = 1;
}
else if (input.size()% 5 > 0){
rows = input.size()/5 + 1;
}
else
rows = input.size()/5;

char message[rows][columns];
int place = 0;

for(int i = 0; i < rows; i++){
for(int j = 0; j < (columns-1); j++){
if(place <= input.size()){
message[rows][columns] = input[place];
}
else {
message[rows][columns] = 'x';
}
place++;
message[rows][5] = 'y';
cout << message[rows][columns];
}
cout << endl;
}}

1

Решение

это должно сделать это ..

#include <iostream>
#include <cctype>
#include <algorithm>
using namespace std;

int main()
{
string input;

cout << "Enter information to be encrypted" << endl;
getline(cin,input);
input.erase(std::remove (input.begin(), input.end(), ' '), input.end());

int columns = 6;
int rows;
if (input.size() <= 5){
rows = 1;
}
else if (input.size()% 5 > 0){
rows = input.size()/5 + 1;
}
else
rows = input.size()/5;

char message[rows][columns];

for(int i = 0; i < rows; i++){
for(int j = 0; j < (columns-1); j++){
if ((i*5 + j) < int(input.size())){
message[i][j] = input[i*5 + j];
}
else {
message[i][j] = 'x';
}
// place++;
if (i != rows-1) message[i][5] = 'y';
else message[i][5] = 'x';
// cout << "i: " << i << " | j: " << j << " | " << message[i][j] << endl;
}
cout << endl;
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
cout << message[i][j];
}
cout << " ";
}
cout << endl;
}
1

Другие решения

Ваш код на самом деле ничего не делает для транспонирования матрицы! Он записывает сообщение в матрицу, но печатает каждую запись сразу после того, как она написана, так что это не приводит к изменению порядка.

Вам понадобится отдельный набор циклов для чтения данных из матрицы.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector