7-1 简单词法分析

一:题目

在这里插入图片描述
在这里插入图片描述

二:思路

思路:
1.记得看书;不要一上来就莽;不然莽不过去的
2.这里我从书中了解到 f(0,b) = 0; f(0,a) = 1;f(1,c)=1;f(1,b)=3…
那么的话我们只要最终推导出f(1,b)=3;那么的话就是一个满足要求的字符串;
注意我们入口部分一定是从 0 开始;
3.接下来就是要判断一些细枝末节
字符是否合法;
字符是否够数;
error不满足自动机的规则 eg:abaaba 那么连续两个a的话就是不合法的
4.那么关于f(0,b) = 0;改用什么数据结构进行存储呢?
map<int,map<char,int>>m; //这个表示是一个二维映射即 我们两个key才可以确定一个value

三:上码

/**思路:1.记得看书;不要一上来就莽;不然是莽不过去的2.这里我从书中了解到  f(0,b) = 0; f(0,a) = 1;f(1,c)=1;f(1,b)=3....那么的话我们只要最终推导出f(1,b)=3;那么的话就是一个满足要求的字符串;注意我们入口部分一定是从 0 开始; 3.接下来就是要判断一些细枝末节字符是否合法;字符是否够数;error不满足自动机的规则 eg:abaaba  那么连续两个a的话就是不合法的   4.那么关于f(0,b) = 0;改用什么数据结构进行存储呢?map<int,map<char,int>>m; //这个表示是一个二维映射即 我们两个key才可以确定一个value   
*/ 		
#include<bits/stdc++.h>
using namespace std; bool judge(char ch) {if (ch == 'a' ||  ch == 'b' ||  ch ==  'c' || ch == 'd') return false;else return true;}int main() {string str;string s;string strs;int state = 1;int cnt = 0;map<int,map<char,int> > m;//将自动机中的符号装进容器 这里是将从0开始的加了个1 主要就是处理不存在key值时候 m[][] = 0的问题 m[1]['b'] = 1;m[1]['a'] = 2;m[2]['c'] = 2;m[2]['b'] = 4;m[2]['d'] = 3;m[3]['a'] = 2; //	if (m.find(m[1]['f']) != m.end()) cout << m[1]['a']; cin >> s;for (int i = 0; i < s.size(); i++) {str += s[i];int flag = 0;if (judge(s[i])) {int j = i+1;str = str.substr(0,str.size()-1);cout << str << endl; cout << "字符串中第" << j << "个字符"<< s[i] <<"是一个非法字符" << endl;return 0;}if (m[state][s[i]] == 0)  {//我们要在下方计算出state之前完成判断,否则同一个 int j = i+1;		 //s[i]但是却有两个不同的state str = str.substr(0,str.size()-1);cout << str << endl; cout << "字符串中第" << j << "个字符"<< s[i] <<"发生了错误" << endl;return 0;} state = m[state][s[i]];//我们主要就是看这个状态是不是3是的话,那就是一个合法的字符串 //这个state我们是需要循环求出 state; if (state == 4) {cout << str << endl;cnt++;strs += str;str = "";//重新计算下一个单词 state = 1;//这个也是从头开始 flag = 1;}if (flag == 0 && i == s.size() - 1) {//flag = 0表示其不满足一个完整字符串的要求 cout << str << endl;cout << "最后一个词不完整" << endl; return 0; }}cout << "字符串共被划分为"<< cnt <<"个词";} 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 生态碎片化 和 .NET生态的一致性

.NET Core是以MIT协议开源&#xff0c; Java是GPL协议开源。Java 8 SDK升级Oracle要收费这件事对于很多小公司是有着重大的影响的&#xff0c;Java生态越发碎片化&#xff0c;有众多的OpenJDK发行版&#xff0c;腾讯云和阿里都有OpenJDK发行版&#xff0c;龙芯也有MIPS版本的Op…

Power Automate Desktop概览

点击蓝字关注我们Microsoft Power Automate使得通过自动化重复性、耗时的任务来提高您的业务效率成为可能。Power Automate提供了一种更好的方法&#xff0c;通过数字和机器人过程自动化(RPA)在整个组织中完成任务。Microsoft Ignite 在线活动小伙伴们都有参加么&#xff1f;重…

超600人!近5小时直播!录屏+彩蛋+PPT…你要的都在这!

2020年9月26日下午&#xff0c;《NCF框架揭秘》直播交流会圆满落幕&#xff01;由盛派首席架构师苏震巍老师主持、分享&#xff0c;更有各路大咖&#xff0c;在线助力&#xff0c;干货满满&#xff01;点击视频 ☝ 回顾直播现场友情提示&#xff1a;如果公众号内视频无法显示高…

leetcode226. 翻转二叉树(Java)

一&#xff1a;题目 二:上码(前序解法) /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left,…

Chrome正在启用HTTP/3,支持IETF QUIC

Chromium 官方宣布 Chrome 正在部署到 HTTP/3 与 IETF QUIC。QUIC&#xff08;Quick UDP Internet Connections&#xff09;是 Google 推出的一个项目&#xff0c;旨在降低基于 TCP 通讯的 Web 延迟。QUIC 非常类似 TCPTLSSPDY &#xff0c;但是基于 UDP 实现的。它是 HTTP/3 的…

leetcode101. 对称二叉树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

诊断日志知多少 | DiagnosticSource 在.NET上的应用

1. 引言最近为了解决ABP集成CAP时无法通过拦截器启用工作单元的问题&#xff0c;从小伙伴那里学了一招。借助DiagnossticSource&#xff0c;可以最小改动完成需求。关于DiagnosticSource晓东大佬18年在文章 在 .NET Core 中使用 Diagnostics (Diagnostic Source) 记录跟踪信息就…

leetcode110. 平衡二叉树(java详解)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

IdentityServer4系列 | 常见术语说明

一、前言在上一篇中&#xff0c;我们IdentityServer4的说明&#xff0c;认识到是一个基于OpenID Connect协议标准的身份认证和授权程序&#xff0c;并简单的对基础知识的认识以及区别说明&#xff0c;从OAuth、OpenID、OpenID Connect以及JWT等进行对比区别说明。而在这一篇中&…

网易年薪40W架构师面试题,欢迎自测!

一个月前被拉进了一个微信群&#xff0c;名字叫《明日都是大佬》&#xff0c;群里有20多个人&#xff0c;都是正在跳槽的&#xff0c;目标是年薪30w&#xff01;投简历、笔试、面试后都相互分享&#xff0c;互通有无你懂的。拉我进群是帮忙解答一些难题&#xff0c;很多题目还是…

leetcode257. 二叉树的所有路径(java递归详解)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

leetcode617. 合并二叉树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)

前言权限管控对于一个系统来说是非常重要的&#xff0c;最熟悉不过的是菜单权限和数据权限&#xff0c;上一节通过Jwt实现了认证&#xff0c;接下来用它实现接口权限的验证&#xff0c;为什么不是菜单权限呢&#xff1f;对于前后端分离而言&#xff0c;称其为接口权限感觉比较符…

.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

目录什么是软件架构软件架构的基本思路单体向分布式演进、云原生、技术中台1.1 什么是软件架构1.1.1 什么是架构&#xff1f;Software architecture {Elements, Forms, Rationale/Constraints}元素、形式/模式、基本原理和限制为什么需要软件架构&#xff1f;软件架构的终极目…

leetcode530. 二叉搜索树的最小绝对差

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

再分享 5 个 vs 调试技巧

前言 之前在《5 个非常实用的 vs 调试技巧》和《继续分享 5 个实用的 vs 调试技巧》中分享了 10 个我认为非常值得了解的 vs 调试技巧&#xff0c;本周继续分享 5 个很实用的调试技巧。1. 显示下一条语句 在调试时&#xff0c;遇到断点中断后&#xff0c;为了更加清楚的了解程…

leetcode501. 二叉搜索树中的众数

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

网络知识 | 《图解HTTP》读书笔记(上)

【网络知识】| 作者 / Edison Zhou这是EdisonTalk的第293篇原创内容作为一个专业的IT技术人&#xff0c;一个Web应用开发者&#xff0c;不了解网络基础和协议&#xff0c;怎么能行&#xff1f;本文是我2016年阅读《图解HTTP》一书的读书笔记&#xff0c;希望对你有所帮助&#…

leetcode292周赛--6057. 统计值等于子树平均值的节点数

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

C# 中 System.Range 结构体

翻译自 John Demetriou 2020年4月6日 的文章 《C# 8 Is Introducing Ranges》我们之前讨论过的 C# 中的一个特性 System.Index 结构体&#xff0c;与另一特性 System.Range 结构体 是携手并进的。在 C# 8.0 之前&#xff0c;没有访问集合中任意部分的范围或切片的语法。开发人员…