串的基本运算实现-加密解密串

问题及代码:

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


运行结果:



练习了一下顺序串~

一开始忘记加密解密后给定串的长度…导致结果各种出不来~
还有就是判断的时候是单引号 ‘ ’ 中间加字符~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值