Untitled
unknown
c_cpp
2 years ago
1.4 kB
13
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...