第四次数据结构上机

本次实验中,学生曹欣宇使用C语言设计了一个程序exp4-4.cpp,该程序能根据给定的字母映射表对输入文本进行加密和解密。实验目的是灵活运用串数据结构解决实际问题,程序在输入'abc'时,输出加密后的结果为'ngz'。程序主要通过初始化两个映射串,并在加密和解密过程中查找对应映射完成操作。实验加深了对串基本操作的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验名称:     串的基本运算实现  

指导教师:           王莹洁              

专业班级:           计163-1        

姓   名:            曹欣宇               

一、实验题目

一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:

abcdefghijklmnopqrstuvwxyz

ngzqtcobmuhelkpdawxfyivrsj

则字符串“abc”被加密为“ngz”。设计一个程序exp4-4.cpp将输入的文本串进行加密后输出,然后进行解密并输出。

二、实验目的

灵活运用串这种数据结构解决一些综合应用问题。

三、实验要求

针对程序exp4-4.cpp,举例:当输入abc时,输出结果举例如下:

 

四、实验步骤

(包括基本设计思路、算法设计、函数相关说明、输入与输出以及程序运行结果)

基本设计思路:将两个字母映射字符串放在两个串中,然后依次根据原文串找到加密串即可,解密思路一致。

算法设计:先将两个字母映射放在串prestr和poststr中,输入原文串后进入加密循环,依次找到对应的字母映射,将其复制给加密串,解密串原理相同。

函数相关说明:void initsq(sqstring &s,char*str)//进行串的初始化,即将字母映射存入串中。

输入:asdasf

输出:见运行图

运行结果:


五、实验心得体会

通过这次实验,掌握了串的基本用法。

 六、源程序清单(代码)

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

typedef struct
{
    char data[50];
    int length;
} sqstring;
void initsq(sqstring &s,char *str)
{
    int i;
    for(i=0; str[i]!='\0'; i++)
        s.data[i]=str[i];
    s.length=i;
}
int main()
{
    int i,j;
    sqstring prestr;
    sqstring poststr;
    char prstr[50]= "abcdefghijklmnopqrstuvwxyz";
    char postr[50]= "ngzqtcobmuhelkpdawxfyivrsj";
    char instr[50]="\0",putstr[50]="\0",jiestr[50]="\0";
    initsq(prestr,prstr);
    initsq(poststr,postr);
    printf("输入原文串:");
    gets(instr);
    for(i=0; instr[i]!='\0'; i++)
    {
        for(j=0; j<prestr.length; j++)
        {
            if(instr[i]==prestr.data[j])
            {
                putstr[i]=poststr.data[j];
                break;
            }
        }
    }
    for(i=0; putstr[i]!='\0'; i++)
    {
        for(j=0; j<poststr.length; j++)
        {
            if(putstr[i]==poststr.data[j])
            {
                jiestr[i]=prestr.data[j];
                break;
            }
        }
    }
    printf("加密解密如下:\n");
    printf("  原文串:");
    puts(instr);
    printf("  加密串:");
    puts(putstr);
    printf("  解密串:");
    puts(jiestr);
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值