如何把英文句子中的空格去除,然后将句子拍成若干行,每行的字符数为换位位数,再按列输出为密文,不足部分填入随机字母,如can you come here若换位数取4,则密文为comraueenchayoeb
这个加密好处理,一维数组转二维数组按列输出就可以了,但是添加随机字符后解密就不好解密了
运行结果:
代码:
#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;
}
就是搞成二维数组呗
#include <stdio.h>
int main()
{
srand(time(NULL));
char s[1000];
char k[30][30] = {0};
gets(s);
int i=0,j=0;
while(s[i] != 0)
{
if(s[i] != ' ')
s[j++] = s[i];
i++;
}
s[j] = 0;
//
int col,row;
scanf("%d",&col);
row = j/col;
if(j%col > 0)
row++;
i=0;
for(int a=0;a<row;a++)
for(int b=0;b<col;b++)
{
if(i<j)
k[a][b] = s[i];
else
k[a][b] = rand()%26 + 'a';
i++;
}
for(int a=0;a<col;a++)
for(int b=0;b<row;b++)
printf("%c",k[b][a]);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!