Untitled
unknown
c_cpp
3 years ago
1.4 kB
18
Indexable
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char opposite_letter(char c) {
return 'Z' - (c - 'A');
}
char* Encode(char* input) {
int len = strlen(input);
char *encoded = (char *)malloc((len*2 + 1) * sizeof(char));
int j = 0;
for (int i = 0; i < len; i++) {
if ((input[i] - 'A' + 1) % 2 == 0) {
encoded[j++] = input[i];
encoded[j++] = opposite_letter(input[i]);
} else {
encoded[j++] = opposite_letter(input[i]);
}
}
encoded[j] = '\0';
return encoded;
}
char* Decode(char* input) {
int len = strlen(input);
char *decoded = (char *)malloc((len/2 + 1) * sizeof(char));
int j = 0;
for (int i = 0; i < len; i++) {
if ((input[i] - 'A' + 1) % 2 == 0) {
if(i+1<len && input[i+1]==opposite_letter(input[i])){
decoded[j++] = input[i];
i++;
}
else{
decoded[j++] = opposite_letter(input[i]);
}
} else {
decoded[j++] = opposite_letter(input[i]);
}
}
decoded[j] = '\0';
return decoded;
}
int main() {
char* word = "ABC";
printf("Original: %s\n", word);
char* encoded = Encode(word);
printf("Encoded: %s\n", encoded);
char* decoded = Decode(encoded);
printf("Decoded: %s\n", decoded);
free(encoded);
free(decoded);
return 0;
}
Editor is loading...