|
发表于 2021-5-4 14:17:27
|
显示全部楼层
本楼为最佳答案
 - #include <stdio.h>
- #include <ctype.h>
- typedef struct {
- char first;
- char second;
- } rule_t;
- char enc_table[256];
- char dec_table[256];
- void rule_init(rule_t rule[], size_t size) {
- for(size_t i = 0; i < 256; ++i) {
- enc_table[i] = dec_table[i] = i;
- }
- for(size_t i = 0; i < size; ++i) {
- enc_table[tolower(rule[i].first)] = enc_table[(int)rule[i].first] = rule[i].second;
- dec_table[tolower(rule[i].second)] = dec_table[(int)rule[i].second] = rule[i].first;
- }
- }
- char *enc(char buff[], size_t size, const char *str) {
- for(size_t i = 0; ; ++i) {
- if(--size == 0) {buff[i] = '\0'; break;}
- buff[i] = enc_table[(int)str[i]];
- if(str[i] == '\0') break;
- }
- return buff;
- }
- char *dec(char buff[], size_t size, const char *str) {
- for(size_t i = 0; ; ++i) {
- if(--size == 0) {buff[i] = '\0'; break;}
- buff[i] = dec_table[(int)str[i]];
- if(str[i] == '\0') break;
- }
- return buff;
- }
- int main(void) {
- rule_t rule[] = {
- {'A', 'D'}, {'B', 'E'}, {'C', 'S'}, {'D', 'T'}, {'E', 'I'}, {'F', 'N'}, {'G', 'Y'}, {'H', 'A'}, {'I', 'B'},
- {'J', 'C'}, {'K', 'F'}, {'L', 'G'}, {'M', 'H'}, {' ', '+'}, {'N', 'J'}, {'O', 'K'}, {'P', 'L'}, {'Q', 'M'},
- {'R', 'O'}, {'S', 'P'}, {'T', 'Q'}, {'U', 'R'}, {'V', 'U'}, {'W', 'V'}, {'X', 'W'}, {'Y', 'X'}, {'Z', 'Z'},
- {'.', '-'}
- };
- rule_init(rule, sizeof(rule) / sizeof(rule[0]));
- char buff[1024];
- puts(enc(buff, 1024, "Good Friends in my eyes."));
- puts(dec(buff, 1024, "YKKT+NOBIJTP+BJ+HX+IXIP-"));
- return 0;
- }
复制代码
- YKKT+NOBIJTP+BJ+HX+IXIP-
- GOOD FRIENDS IN MY EYES.
复制代码 |
|