#include #include int char_to_int(char *c) { int value = 0; int sign = 1; if(*c == '-') { sign = -1; c++; } while(*c != '\0') { value *= 10; value += *c - '0'; c++; } return value * sign; } int main(int argc, char *argv[]) { if(argc != 3) { throw std::invalid_argument("Wrong number of parameters! Run like this: \"caeser x texthere\" where X is the desired shift amount"); } int inputLength = strlen(argv[2]); int shift = char_to_int(argv[1]); while (shift < 0) { shift += 26; } char *output = (char*) malloc(inputLength); for(int i = 0; i < inputLength; i++) { int cVal = argv[2][i]; int rStart; if(cVal >= 'A' && cVal <= 'Z') { rStart = 'A'; } else if(cVal >= 'a' && cVal <= 'z'){ rStart = 'a'; } else { output[i] = cVal; continue; } int rVal = cVal - rStart; rVal = (rVal + shift) % 26; output[i] = rVal + rStart; } std::cout << output << '\n'; free(output); return 0; }