またアルファベットだけでなく、日本語のひらがなも暗号化できるようにするにはどうすればよいのでしょうか。
お知恵を拝借できましたら、ありがたく存じます。
// 文字列をシャッフルして配列にし、暗号化と複合(std::shuffle使用)
#include <numeric>
#include <iterator>
#include <random>
#include <iostream>
#include <algorithm>
#include <random>
int main()
{
std::string PRAIN = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// std::cout << PRAIN << std::endl;
std::random_device seed_gen;
std::mt19937 engine(seed_gen());
std::shuffle(PRAIN.begin(), PRAIN.end(), engine);
// std::cout << PRAIN << std::endl;
char alp[26] = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
PRAIN.copy(alp, 26);
for (int i = 0; i < 26; i++) {
// std::cout << alp[i] << ' ';
}
int array_size = 26;
int tagPos = 0;
std::string plain;
std::cout << "アルファベット大文字と','でテキストを入力してください。\n";
std::cin >> plain;
std::cout << "暗号文は : ";
for (int i = 0; i < (int)plain.size(); ++i) {
char p = plain[i];
while (p != alp[tagPos] && p != ',') {
if (tagPos < array_size) {
tagPos++;
} else {
tagPos = 0;
}
}
if (p != ',') std::cout << tagPos << ' ';
}
std::cout << "です。" << "\n";
std::string cip;
std::cout << "数字のあとに','を付けて暗号文を入力してください(例: 1,10,22,) : ";
std::cin >> cip;
std::cout << "復号された原文は : ";
for (int j = 0; j < (int)cip.size(); j++) {
if (cip[j] != ',' && cip[j + 1] == ',') {
int c = cip[j] - '0';
std::cout << alp[c];
} else if (cip[j] != ',' && cip[j + 1] != ',') {
int c = ((cip[j] - '0') * 10) + (cip[j + 1] - '0');
std::cout << alp[c];
j = j + 1;
} else if (cip[j] == ',') {
std::cout << ' ';
} else {
return 0;
}
}
std::cout << "です。" << std::endl;
}