串的基本運算實現-加密解密串

kewlgrl發表於2016-04-18

問題及程式碼:

/*
* 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


執行結果:



練習了一下順序串~

一開始忘記加密解密後給定串的長度…導致結果各種出不來~
還有就是判斷的時候是單引號 ‘ ’ 中間加字元~


相關文章