如何把英文句子中的空格去除,然后将句子拍成若干行,每行的字符数为换位位数,再按列输出为密文,不足部分填入随机字母,如can you come here若换位数取4,则密文为comraueenchayoeb
3条回答 默认 最新
技术专家团-小桥流水 2022-12-14 16:33关注这个加密好处理,一维数组转二维数组按列输出就可以了,但是添加随机字符后解密就不好解密了
运行结果:

代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXLEN 10000 int main() { char str[MAXLEN] = { 0 }; int i = 0, j = 0; char tmp; int n; char** p; int len; const char* sr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; //用于生成随机字符 srand(time(0)); printf("请输入一行英文句子:\n"); gets(str);//读取一行英文句子 printf("请输入换位位数:"); scanf("%d", &n); for (i = 0, j = 0; str[i] != '\0'; i++) { if (str[i] != ' ') str[j++] = str[i]; //过滤掉空格 } len = j; //字符串长度 if(len%4 == 0) str[j] = '\0'; //结束符 else { for (i = 0; i < n - len % n; i++) //补齐不足的位数 str[j++] = sr[rand() % 62]; //生成随机字符 str[j] = '\0'; //结束符 } len = j; p = (char**)malloc(sizeof(char*)*(len/n)); for (i = 0; i < len / n; i++) { p[i] = (char*)malloc(n + 1); for (j = 0; j < n; j++) p[i][j] = str[i * n + j]; } //按列输出 for (j = 0; j < n; j++) { for (i = 0; i < len / n; i++) printf("%c", p[i][j]); } //释放内存 for (i = 0; i < len / n; i++) { free(p[i]); p[i] = 0; } free(p); p = 0; return 0; }本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报 编辑记录解决 2无用