当前位置: 首页 > news >正文

【数据结构题集(c语言版)】魔王语言解释 题解(字符串+栈)

魔王语言解释

问题描述

有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:

规则

在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。

基本要求

用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇,希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。

具体规则

测试数据

B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae

若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。

对应关系

实现提示

将魔王的语言自右至左进栈,总是处理栈顶字符。若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入。其他情形较简单,请读者思考应如何处理。应首先实现栈和队列的基本操作。

选作内容

  1. 由于问题的特殊性,可以实现栈和队列的顺序存储空间共享。
  2. 代换变量的数目不限,则在程序开始运行时首先读入一组第一种形式的规则,而不是把规则固定在程序中(第二种形式的规则只能固定在程序中)。

思路

首先定义一些常量和类型别名,包括状态 Status 和元素类型 ElemType。接着,定义了几个字符串常量 A_NEWB_NEW,分别用于替换字符 ‘A’ 和 ‘B’。

然后定义了四个函数 fa, fb, fcfd,这四个函数按照特定规则转换输入的字符串。fafb 函数用于将字符串中的 ‘B’ 和 ‘A’ 分别替换为 B_NEWA_NEW

fc 函数用于处理字符串中的括号。对于每个开括号,找到对应的闭括号,并将其中的字符压入栈中,然后将栈中的字符依次弹出并添加到新的字符串中。

fd 函数将字符串中的每个字符映射到对应的汉字。

最后,在 main 函数中,读取输入的字符串,然后按照 fa, fb, fc, fd 的顺序对字符串进行处理,最后输出处理后的字符串。

算法分析

时间复杂度是 O ( n ) O(n) O(n),其中 n n n 是字符串的长度,空间复杂度是 O ( m ) O(m) O(m),其中 m m m 是括号中字符的数量。


AC代码

#include <algorithm>
#include <iostream>
#include <stack>
#define AUTHOR "HEX9CF"
using namespace std;
using Status = int;
using ElemType = int;const int N = 1e6 + 7;
const int TRUE = 1;
const int FALSE = 0;
const int OK = 1;
const int ERROR = 0;
const int INFEASIBLE = -1;
// const int OVERFLOW = -2;const string A_NEW = "sae";
const string B_NEW = "tAdA";string fa(string str) {int pos = 0;while ((pos = str.find('B', pos)) != string::npos) {str.replace(pos, 1, B_NEW);pos += B_NEW.length();}return str;
}string fb(string str) {int pos = 0;while ((pos = str.find('A', pos)) != string::npos) {str.replace(pos, 1, A_NEW);pos += A_NEW.length();}return str;
}string fc(string str) {for (int i = 0; i < str.length(); i++) {if (str[i] == '(') {string s = "";stack<char> stk;int begin = i;char xita = str[++i];while (str[++i] != ')') {stk.push(str[i]);// cout << str[i] << endl;}int len = stk.size();while (stk.size()) {char t = stk.top();stk.pop();s += xita;s += t;}s += xita;// cout << s << endl;str.replace(begin, len + 3, s);i = begin + len * 2 + 1;}}return str;
}string fd(string str) {string ret = "";for (const auto i : str) {switch (i) {case 't':ret += "天";break;case 'd':ret += "地";break;case 's':ret += "上";break;case 'a':ret += "一只";break;case 'e':ret += "鹅";break;case 'z':ret += "追";break;case 'g':ret += "赶";break;case 'x':ret += "下";break;case 'n':ret += "蛋";break;case 'h':ret += "恨";break;}}return ret;
}int main() {string str;cin >> str;str = fa(str);str = fb(str);str = fc(str);str = fd(str);cout << str << endl;return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【JavaEE】文件操作
  • Shell——流程控制语句(if、case、for、while等)
  • SQLALchemy ORM 的关联关系之 ORM 中的一对一
  • 2024.8.17
  • 基于DPU云盘挂载的Spark优化解决方案
  • 【Linux网络】高级 I/O
  • 电脑监控怎样看回放视频?一键解锁电脑监控回放,守护安全不留死角!高效员工电脑监控,回放视频随时查!
  • mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、mycat读写分离实现
  • P2016 战略游戏
  • 【Python机器学习】利用PCA来简化数据——示例:利用PCA对半导体制造数据降维
  • 【书生大模型实战营(暑假场)闯关材料】基础岛:第1关 书生大模型全链路开源体系
  • Kubectl 常用命令汇总大全
  • Vue3里如何使用本地lottie动画以及如何更优雅的批量引入图片
  • 在uniapp中使用swicth组件传递额外的参数方法
  • mysql-数据库性能测试之,连接数测试
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Django 博客开发教程 16 - 统计文章阅读量
  • download使用浅析
  • mysql 5.6 原生Online DDL解析
  • Python连接Oracle
  • vue脚手架vue-cli
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 对象管理器(defineProperty)学习笔记
  • 工程优化暨babel升级小记
  • 关于 Cirru Editor 存储格式
  • 思维导图—你不知道的JavaScript中卷
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # Java NIO(一)FileChannel
  • #每日一题合集#牛客JZ23-JZ33
  • $ git push -u origin master 推送到远程库出错
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)Elastix图像配准:3D图像
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (六)vue-router+UI组件库
  • (十三)Maven插件解析运行机制
  • (转)关于多人操作数据的处理策略
  • (转)四层和七层负载均衡的区别
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ***检测工具之RKHunter AIDE
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .apk 成为历史!
  • .FileZilla的使用和主动模式被动模式介绍
  • .Net Core与存储过程(一)
  • .net SqlSugarHelper
  • .Net 代码性能 - (1)
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...