C语言数据结构【串-加密与解密】附源码

题目要求

58ba0e583c8544b0a2753e51dd40073f.png

思路 

这个是最关键的

d76b5f008af04eab9b3d38179db60d28.png

97是‘a’的编码数字

类似的例子是

char c = '9';
int a = 0;
a = c - '0';
a = 9;//这样我们就知道了字符是对应的哪个数字

 

 

代码

#include <stdio.h>
#include"lab8_2_EncrypFunction.cpp"

int main() {
	SqString p, s, x;//p为初始串,s为对应密文字母,x为输入串 
	char ch;int i = 0;
	printf("现在是加密时间!\n");
	char a[]="abcdefghijklmnopqrstuvwxyz";
	char b[]="ngzqtcobmuhelkpdawxfyivrsj";
	StrAssign_lijie(p, a);//建立初始串 
	StrAssign_lijie(s, b);//建立密文串
	printf("输入原文串:");
	while(scanf("%c", &ch) != EOF){
		if(ch >= 'a' && ch <= 'z'){
			x.data[i] = ch;
			x.length++;
			i++;
		}	
		else
			break;//输入非小写字母时停止录入 
	}
	printf("加密解密如下:\n");
	printf("  原文串:");
	DispStr_lijie(x);//展示输入串x 
	printf("  加密串:"); 
	EncrypFunction_lijie(p, s, x);//加密输入串 
	DispStr_lijie(x);//内置换行 
	printf("  解密串:");
	Decoding_lijie(p, s, x);
	DispStr_lijie(x);
	DestroyStr_lijie(p);DestroyStr_lijie(s);DestroyStr_lijie(x);
	return 0;
}

lab8_2_EncrypFunction.cpp

//顺序串实现加密解密 
#include <stdio.h>
#define MaxSize 100
typedef struct
{	
	char data[MaxSize];		//串中字符
	int length;				//串长
} SqString;					//声明顺序串类型
void StrAssign_lijie(SqString &x, char cstr[])	//字符串常量赋给串s
{
	int i_1;
	for (i_1 = 0; cstr[i_1] != '\0'; i_1++)
		x.data[i_1] = cstr[i_1];
	x.length = i_1;
}
void DestroyStr_lijie(SqString &s)		//销毁串
{ }
void DispStr_lijie(SqString &s)	//输出串s
{
	if (s.length > 0)
	{	for(int i = 0; i < s.length; i++)
			printf("%c", s.data[i]);
		printf("\n");
	}
}
void EncrypFunction_lijie(SqString p, SqString s, SqString &x)//加密 
{
	char c;//坐标 
	for(int k = 0; k < x.length; k++)//按照输入串的长度循环 
	{
		c = x.data[k] - 97;//在p中的位置 
		x.data[k] = s.data[c];  
	}
}
SqString Decoding_lijie(SqString p, SqString s, SqString &x)//解密 
{
	char c; 
	for(int v = 0; v < x.length; v++){
		for(int j = 0; j < s.length; j++){
			if(x.data[v] == s.data[j]){
				x.data[v] = p.data[j];
				break;
			}
		}
	}
} 

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值