#include // C++ header file for input/output #include // C++ header file for strings std::string key = "FCTUNL"; int n = 4; bool inKey(char s){ return key.find(s) != std::string::npos; } int mod(int a, int b){ if(a >= b) return a%b; else if(a < 0) return 26 + a; else return a; } std::string Encode(const std::string &message) { std::string encoded = ""; int m = 0; int i; int size = message.size(); for(i = 0; i < size; i++){ char s = message[i]; if(inKey(s)){ encoded += key[m]; m = mod(m + 1, key.size()); } int s2 = (s - 'A') + n; int newS = mod(s2, 26); encoded += 'A' + newS; if(inKey(s)) encoded += key[m]; } return encoded ; } std::string Decode(const std::string &message) { std::string decoded = ""; int m = 0; int i; int size = message.size(); for(i = 0; i < size; i++){ char s = message[i]; if(s == key[m] && i + 2 < size && message[i + 2] == key[m+1]){ m++; int s2 = message[i+1] - 'A'; int newS = mod(s2 - n, 26); decoded += 'A' + newS; i = i+2; } else { int s2 = message[i] - 'A'; int newS = mod(s2 - n, 26); decoded += 'A' + newS; } } return decoded; } int main() { std::string original = "ATACAMOSAOAMANHECER" ; std::string decode = "EFXCECGTEQSWESEQETRULIUGNIV" ; std::cout << "Escreva a chave:\n"; std::cin >> key; std::cout << "Escreva o valor de n:\n"; std::cin >> n; std::cout << "Escreva a palavra a cifrar:\n"; std::cin >> original; std::string encoded = Encode(original) ; std::cout << encoded << std::endl ; std::cout << "Escreva a palavra a decifrar:\n"; std::cin >> decode; std::string decoded = Decode(decode) ; std::cout << decoded << std::endl ; return 0; }