diff --git a/src/crypt.c b/src/crypt.c index 75f9cde..fb1a1a6 100644 --- a/src/crypt.c +++ b/src/crypt.c @@ -10,16 +10,39 @@ #include "crypt.h" +// Which of the two below functions is faster (find out!) +inline int mod(int a, int b) +{ + return (a % b + b) % b; +} + +inline int fast_mod(int a, int b) +{ + const int result = a % b; + return result >= 0 ? result : result + b; +} + +// Below two functions do NOT work for lower case letters (fix this!) void caesar_encrypt(char* str, int size, int key) { for (int i = 0; i < size && str[i] != '\n'; i++) - if (str[i] != ' ') str[i] += key % 26; + if (str[i] != ' ') + { + str[i] += key - 65; + str[i] %= 26; + str[i] += 65; + } } void caesar_decrypt(char* str, int size, int key) { for (int i = 0; i < size && str[i] != '\n'; i++) - if (str[i] != ' ') str[i] -= key % 26; + if (str[i] != ' ') + { + str[i] = str[i] - key - 65; + str[i] = mod(str[i], 26); + str[i] += 65; + } }