Я пытаюсь написать Vigenere Cipher, который читает (-e для шифрования, -d для дешифрования), ключевое слово (используется во время шифрования), текстовый файл, откуда исходит исходное сообщение, и другой текстовый файл, где зашифрованное / расшифрованное сообщение передается всем, из аргументов командной строки. У меня проблема с тем, как читать все из командной строки в виде строки и использовать символы для фактического шифрования. Я нашел множество других программ только на надежных шифрах, но ни на одной из них все аргументы не были прочитаны из командной строки.
Вот мой (незаконченный) код.
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
using namespace std;
char encipher(char key, char plain);
char decipher(char key, char cipher);
int main(int argc, char* argv[]){
ifstream inFile(argv[3]);
ofstream outFile(argv[4]);
string key = argv[2];
for (int i = 0; i < argc; i++){
string arg = argv[i];
if (arg == "-e"){
inFile.open(arg.c_str());
string plain = ;
encipher(key, plain);
}
else if (arg == "-d"){
inFile.open(arg.c_str());
decipher(key, cipher);
}
}char encipher(char key, char plain){
for (int i = 0; i < key.size(); i++){
if (key[i] >= 'A' && key[i] <= 'Z')
key += key[i];
else if (key[i] >= 'a' && key[i] <= 'z')
key += key[i] + 'A' - 'a';
return key;
}}
char decipher(char key, char cipher){
for (int i = 0; i < key.size(); i++){
if (key[i] >= 'A' && key[i] <= 'Z')
key -= key[i];
else if (key[i] >= 'a' && key[i] <= 'z')
key -= key[i] + 'A' - 'a';
}
}
Попробуйте использовать strcmp, а не сразу сравнивать две строки.
В
if (arg == "-e")
а также
else if (arg == "-d")
Других решений пока нет …