fix modulo when key is below 26
This commit is contained in:
parent
79dd09da1a
commit
2f58a337f1
27
src/crypt.c
27
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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user