Shit Cipher に取り組んでいて、特定のテキストを解読しています。さて、プログラムの仕組みは次のとおりです。
- テキストファイルから文字を取得します
- 各文字をアルファベットの 9 桁下にシフトします。
今、私はこれを行いましたが、文字を常に9桁シフトできるとは限らないことを知っているので、プログラムは文字がアルファベット文字配列のどこにあるかを調べ、それが可能であれば9を追加します.それができない場合は、単に 9 を減らします (差を見つけます)。しかし、それは機能しておらず、どこが間違っているのかわかりません。
コードは次のとおりです。
#include <iostream>
#include <fstream>
using namespace std;
string inputFile = "";
#define MAX_FILE_SIZE 10000
const char alphabet[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'};
const char alphabetUpper[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'};
const int sizeAlpha = sizeof(alphabet)/sizeof(alphabet[0]);
void Data(char* theData)
{
ifstream txtFile(inputFile.c_str());
if(!txtFile.is_open())
{
cerr << "Cannot open text file";
}
txtFile.read(theData, 520);
}
int main(int argc, char *argv[]) {
char getData[MAX_FILE_SIZE];
Data(getData);
char decrypted[520];
int algorthm;
for(unsigned i=0; (i < 520); i++)
{
for(unsigned j=0; (j < 26); j++)
{
if(getData[i] == alphabet[j] || alphabetUpper[j])
{
algorthm = j + 9; // we move 9 places.
if(sizeAlpha < algorthm)
{
decrypted[i] = alphabet[algorthm];
}else if(algorthm > sizeAlpha || algorthm == sizeAlpha)
{
algorthm = sizeAlpha - j;
decrypted[i] = alphabet[algorthm];
}
}
}
}
for(unsigned i=0; (i < 520); i++)
{
cout << decrypted[i];
}
}
私が間違っている場所を知っている人はいますか、それとも同様の解決策を提供できますか?