C语言 编写按以下加密规则对指定的加密钥匙KEY和原文字符串的加密函数 设原文字符串有n个字符。。。。。

2025-01-07 21:21:05
推荐回答(1个)
回答1:

上次没仔细审题,现已按照题目条件更正源程序。方法:用线性数组模拟循环

#include
#include
#define n 10 //字符个数
#define key 6 //钥匙(1~n)
int makePassword(char *word,char *password)
{
int i=0; //遍历原文数组的下标
int check[n-1]; //标记是否被访问
int start=0; //指向原字符串当前插入元素的位置
int pos=0; //指向密文数组中的插入位置
for(i=0;i if(key<0||key>=n-1) return 0; //密钥越界,返回失败
i=0;
while(start {
if(0==check[i]) //若未标记则pos开始计数(跳过已存值的位置)
{
// printf("check[%d]=%d\n",i,check[i]); //测试用,可查看标记内容
if(++pos==key)
{
// printf("pos=%d,password[%d]=%c\n",pos,i,word[start]); //测试用,可查看插入点的存入值及对应原数组中的下标值
pos = 0;
password[i] = word[start++];
check[i] = 1; //标记为已访问
}
}

if(i==n-2) i=0; //由于word[n-1]为结束符,不参与循环,即记到最后一个字母时重新开始遍历原文数组
else i++;
}
password[n-1]='\0'; //密文末加上结束符
return 1;
}

int main()
{
char word[n]="it'sAtrap",password[n]; //注意字符串长度需等于n-1,留一个给结束符'\0'
if(makePassword(word,password)==1) //若转换成功则打印
printf("原文:%s\n密文:%s\n",word,password);
return 0;
}