串的基本運算實現-加密解密串
問題及程式碼:
/*
* Copyright (c) 2016, 煙臺大學計算機與控制工程學院
* All rights reserved.
* 檔名稱:encrypt.cpp
* 作 者:單昕昕
* 完成日期:2016年4月18日
* 版 本 號:v1.0
* 問題描述:一個文字串可用事先給定的字母對映表進行加密。
例如,設字母對映表為:
abcdefghijklmnopqrstuvwxyz
ngzqtcobmuhelkpdawxfyivrsj
則字串“abc”被加密為“ngz”。
設計一個程式exp4-4.cpp將輸入的文字串進行加密後輸出,然後進行解密並輸出。
* 程式輸入:一個字串。
* 程式輸出:原文串、加密串和解密串。
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MaxSize=100;
//非緊縮格式的順序串的型別定義
typedef struct
{
char data[MaxSize];
int length;
} SqString;
SqString str;//原文串
SqString s1;//加密串
SqString s2;//解密串
void StrAssign(SqString &s,char cstr[])//將一個字串常量賦給串s
{
int i;
for(i=0; cstr[i]!='\0'; ++i)
s.data[i]=cstr[i];
s.length=i;
}
void Disstr(SqString s)//輸出串s的所有元素值
{
int i;
if(s.length>0)
{
for(i=0; i<s.length; ++i)
cout<<s.data[i];
cout<<endl;
}
}
void EncryptStr(SqString s)//加密串
{
s1.length=0;//初始化串的長度
int i;
for(i=0; i<s.length; ++i)//列舉加密
{
if(s.data[i]=='a') s1.data[i]='n';
else if(s.data[i]=='b') s1.data[i]='g';
else if(s.data[i]=='c') s1.data[i]='z';
else if(s.data[i]=='d') s1.data[i]='q';
else if(s.data[i]=='e') s1.data[i]='t';
else if(s.data[i]=='f') s1.data[i]='c';
else if(s.data[i]=='g') s1.data[i]='o';
else if(s.data[i]=='h') s1.data[i]='b';
else if(s.data[i]=='i') s1.data[i]='m';
else if(s.data[i]=='j') s1.data[i]='u';
else if(s.data[i]=='k') s1.data[i]='h';
else if(s.data[i]=='l') s1.data[i]='e';
else if(s.data[i]=='m') s1.data[i]='l';
else if(s.data[i]=='n') s1.data[i]='k';
else if(s.data[i]=='o') s1.data[i]='p';
else if(s.data[i]=='p') s1.data[i]='d';
else if(s.data[i]=='q') s1.data[i]='a';
else if(s.data[i]=='r') s1.data[i]='w';
else if(s.data[i]=='s') s1.data[i]='x';
else if(s.data[i]=='t') s1.data[i]='f';
else if(s.data[i]=='u') s1.data[i]='y';
else if(s.data[i]=='v') s1.data[i]='i';
else if(s.data[i]=='w') s1.data[i]='v';
else if(s.data[i]=='x') s1.data[i]='r';
else if(s.data[i]=='y') s1.data[i]='s';
else if(s.data[i]=='z') s1.data[i]='j';
}
s1.length=i;//給定串的長度
}
void DecipheringStr(SqString s)//解密串
{
s2.length=0;//初始化串的長度
int i;
for(i=0; i<s.length; ++i)//列舉解密
{
if(s.data[i]=='n') s2.data[i]='a';
else if(s.data[i]=='g') s2.data[i]='b';
else if(s.data[i]=='z') s2.data[i]='c';
else if(s.data[i]=='q') s2.data[i]='d';
else if(s.data[i]=='t') s2.data[i]='e';
else if(s.data[i]=='c') s2.data[i]='f';
else if(s.data[i]=='o') s2.data[i]='g';
else if(s.data[i]=='b') s2.data[i]='h';
else if(s.data[i]=='m') s2.data[i]='i';
else if(s.data[i]=='u') s2.data[i]='j';
else if(s.data[i]=='h') s2.data[i]='k';
else if(s.data[i]=='e') s2.data[i]='l';
else if(s.data[i]=='l') s2.data[i]='m';
else if(s.data[i]=='k') s2.data[i]='n';
else if(s.data[i]=='p') s2.data[i]='o';
else if(s.data[i]=='d') s2.data[i]='p';
else if(s.data[i]=='a') s2.data[i]='q';
else if(s.data[i]=='w') s2.data[i]='r';
else if(s.data[i]=='x') s2.data[i]='s';
else if(s.data[i]=='f') s2.data[i]='t';
else if(s.data[i]=='y') s2.data[i]='u';
else if(s.data[i]=='i') s2.data[i]='v';
else if(s.data[i]=='v') s2.data[i]='w';
else if(s.data[i]=='r') s2.data[i]='x';
else if(s.data[i]=='s') s2.data[i]='y';
else if(s.data[i]=='j') s2.data[i]='z';
}
s2.length=i;//給定串的長度
}
int main()
{
char c[MaxSize];
cout<<"請輸入原文串:";
gets(c);
StrAssign(str,c);//將一個char c[]賦給串str
cout<<"加密解密如下:"<<endl;
cout<<"原文串:";
Disstr(str);//輸出原文串
cout<<"加密串:";
EncryptStr(str);//加密
Disstr(s1);//輸出加密串
cout<<"解密串:";
DecipheringStr(s1);//解密
Disstr(s2);//輸出解密串
}
//測試用例:encrypt
練習了一下順序串~
一開始忘記加密解密後給定串的長度…導致結果各種出不來~
還有就是判斷的時候是單引號 ‘ ’ 中間加字元~
相關文章
- 2,javase程式碼實戰-運算子——位運算實現加密解密 (一)Java加密解密
- iOS 鑰匙串的基本使用iOS
- 【練習】串的堆分配實現
- 【練習】塊鏈串的實現
- 串的堆分配表示與實現
- 假設串S1 = "I come from Beijing",S2 = "Chongqing" ,Sub = "America". 利用串的基本操作,如果串的賦值、串的插入、串的刪除、串的替換、對上面賦值
- 順序結構儲存串實現串萬用字元匹配的演算法字元演算法
- 深度學習與計算機視覺系列(9)_串一串神經網路之動手實現小例子深度學習計算機視覺神經網路
- 76.最小覆蓋子串 Golang實現Golang
- 微信支付退款解析 對加密串 B 做 AES-256-ECB 解密(PKCS7Padding)加密解密padding
- 子串查詢;及排列子串分析
- 加密、解密詳解及CA的實現加密解密
- BMH子串查詢演算法(PHP實現)演算法PHP
- 子串位置
- PHP實現摩斯電碼加密解密PHP加密解密
- java使用DES加密方式,實現對資料的加密解密Java加密解密
- 自己實現一個 DFA 串模式識別器(一)模式
- Java實現RS485串列埠通訊Java串列埠
- 最長公共子串 二維陣列 Go實現陣列Go
- 自己實現一個 DFA 串模式識別器(二)模式
- Go 如何實現 PHP 的密碼加密解密GoPHP密碼加密解密
- 計算兩個字串最大公有子串字串
- 編寫一個程式實現模式串的各種模式匹配模式
- [leetcode 30 串聯所有單詞的子串 10ms]LeetCode
- 算力網路串聯數字社會 SPN奠定堅實底座
- hdu2896 AC自動機-標記哪些模式串在目標串中出現過模式
- 子串查詢
- 查詢子串
- C# 格式串C#
- 最長子串
- 使用Java加密與解密實現步驟Java加密解密
- java實現DES資料加密與解密Java加密解密
- java 實現 DES加密 解密演算法Java加密解密演算法
- 串的簡單處理
- Java 的字串和子串Java字串
- hdu3065 AC自動機-每個標準串在模式串中出現的次數模式
- hdu5384 AC自動機模板題,統計模式串在給定串中出現的個數模式
- (迴文串)leetcode各種迴文串問題LeetCode