程序最美(寻路)

你还在坚持练习你的技术吗?运动员天天训练,音乐家也会演练更难的曲章。你呢?

2013年9月11日

参数解析

摘要: 参数解析 一函数传递的参数为以字符串,其具体格式是用”$”和”|”来间隔文件名和数据项名,我们的工作时将参数字符串进行解析,得到一个个具体的文件名-数据项的形式。 我们可以采用顺序扫描的方法进行解析,也可以利用状态转换图进行解析。 字符串的格式为:文件之间用”$”来间隔,数据项之间用”|”来间隔。 例如:A|01|02|03|04|05|$B|01|02|03|$C|01|09|$ 该字符串指明了四个文件:A、B、C、D,其中,A文件的数据项为01、02、03、04、05,B文件的数据项为01、02、03,C文件的数据项为01、09。 我们是想得到如下的结果: A 01 A 02 A 03 A 阅读全文

posted @ 2013-09-11 10:37 unixfy 阅读(990) 评论(0) 推荐(0) 编辑

2013年9月4日

自动机专题

摘要: 自动机专题http://zhidao.baidu.com/question/534740975.html这里是针对注释、标识符、实常数的识别,各实现一个有穷状态自动机。其实,可以将注释、标示符、实常数三个有穷状态自动机合并成一个自动机,将三种情况下的状态进行合并,针对每种状态在各种字符的条件下进行相关判断(case…)。即可完成统一的有穷状态自动机的实现。附:豆瓣上关于有穷状态自动机的介绍:http://www.douban.com/note/74804011/http://zh.wikipedia.org/wiki/%E8%87%AA%E5%8A%A8%E6%9C%BA%E7%BC%96%E 阅读全文

posted @ 2013-09-04 15:44 unixfy 阅读(551) 评论(0) 推荐(1) 编辑

2013年8月30日

两个数交换的讨论

摘要: 两个数交换的讨论 C语言课中,两个数交换的程序必定会涉及,尤其是在讲解如何传参时。这里我们重点讨论一下两个数交换有哪几种方式,以及其原理是什么。 首先,我们给出几种两个数交换的代码,然后逐一讨论:#include #include using namespace std;void swap1(int& a, int& b){ int t = a; a = b; b = t;}void swap2(int& a, int& b){ a = a + b; b = a - b; a = a - b;}void swap3(int& a, int& b) 阅读全文

posted @ 2013-08-30 13:33 unixfy 阅读(285) 评论(0) 推荐(0) 编辑

2013年8月27日

扑克牌的游戏

摘要: 扑克牌的游戏 手中有13张扑克牌,分别是1、2、3、4、5、6、7、8、9、10、J、Q、K,这里我们相求一种顺序,使得:每次将牌盖住,将最上面的牌放在最下面,再将最上面的牌扔出,使得扔出去的牌的顺序依次为:1、2、3、4、5、6、7、8、9、10、J、Q、K。 我们首先给出程序的模拟操作,初始时的顺序依次为:1、2、3、4、5、6、7、8、9、10、J、Q、K。 从初始顺序到结果顺序的过程为:先把初始顺序中的第一个元素放到最下面,然后将之后初始顺序中第一个元素抽出来,放入到结果顺序中。在我们的模拟程序中,用vector保存初始顺序和结果顺序,首先检测初始顺序序列是否为空,如果不为空,则首先将 阅读全文

posted @ 2013-08-27 17:07 unixfy 阅读(311) 评论(0) 推荐(0) 编辑

2013年8月25日

简单虚拟机

摘要: 简单虚拟机 本文参考自《一个简单的虚拟机》 虚拟机有: 1.内存:大小100字 2.寄存器:指令计数器指令寄存器操作码寄存器内存地址寄存器累加寄存器 3.指令:指令解释01输入02输出03加载数据到累加寄存器04存放累加寄存器数据到内存05加06减07乘08除09转移10小于零转移11等于零转移12终止0000输入结束 比如有以下程序:打印两个数中的较大数行号指令解释000120输入一个数到内存20010121输入一个树到内存21020320加载内存20中的数据到累加寄存器中030621累加寄存器减去内存21的数据041007如果小于0,则转移到内存07050220输出内存20的数据06120 阅读全文

posted @ 2013-08-25 01:56 unixfy 阅读(1585) 评论(0) 推荐(0) 编辑

2013年8月22日

代数表达式的四则运算

摘要: 代数表达式的四则运算 前面我们讨论了四则运算的相关情形,对于给定的中缀表达式,我们对其进行词法分析、中缀转后缀、后缀计算等过程,最终得到中缀表达式的值。 在我们输入的中缀表达式中,我们对于每个操作数都是已知的值,不存在未知量。 而在本文中,我们是重点讨论有关中缀表达式中存在未知量的情形,我们将含有未知量的表达式称作为代数表达式。 比如给定一代数表达式:a+b-c/d*xyz 该表达式中存在5个未知量:a、b、c、d以及xyz。我们的处理过程还是按照以前处理四则运算的情形那样,首先对输入的代数表达式进行词法分析,得到想要的操作符、已知量、未知量等。然后将中缀表达式转换为后缀表达式,最后在进行后缀 阅读全文

posted @ 2013-08-22 01:33 unixfy 阅读(1097) 评论(0) 推荐(0) 编辑

2013年8月19日

后缀表达式转换为中缀表达式

摘要: 后缀表达式转换为中缀表达式 之前我们介绍过《中缀表达式转化为后缀表达式》,现在我们想得到其逆过程,即如何由后缀表达式转换为中缀表达式。 目前我先给出我的一种理解和实现,其他方法以后再议。 有关中缀表达式的词法分析,本文不作考虑,而是直接用加了空格硬分割操作符和操作数的后缀表达式。 我们先来回忆一下后缀表达式的计算方法,可参考《后缀表达式的计算》。后缀表达式的计算过程为:首先设置一个操作数栈,对后缀表达式进行从左到右的扫描,如果是操作数,则直接压栈,如果是操作符,则从操作数栈中弹出相应的操作数结合当前操作符进行相应的运算,后将运算而得的结果压入到栈中,直至扫描完整个栈后,如果该中缀表达式是合法的 阅读全文

posted @ 2013-08-19 22:38 unixfy 阅读(7071) 评论(1) 推荐(2) 编辑

2013年8月18日

雇员记录系统

摘要: 雇员记录系统 由于内容来自于《Professional C++》,所以书中相关说明不再赘述。 一、Employee类我们先实现一个Employee类:// Employee类声明// Employee.h#pragma once#include namespace EmployeeRecorder{ const int kDefaultStartingSalary = 30000; class Employee { public: Employee(void); ~Employee(void); void pro... 阅读全文

posted @ 2013-08-18 00:37 unixfy 阅读(608) 评论(0) 推荐(1) 编辑

2013年8月16日

基于词法分析的中缀表达式计算

摘要: 基于词法分析的中缀表达式计算 前面我们对中缀表达式的词法处理进行了讲解并给出了程序示例《四则运算的词法分析》,之前我们也对中缀表达式的计算进行了一系列的分析,诸如《检测中缀表达式的合法性》。在之前的中缀表达式的计算中,我们是利用了空白符来间隔操作符和操作数,这属于一种硬分割。 本文我们利用上一篇中对中缀表达式进行词法分析,进而通过中缀表达式转换为后缀表达式,进而计算后缀表达式来实现基于词法分析的中缀表达式计算。 程序的处理过程主要是包括3个部分: 1.对中缀表达式进行词法分析 2.中缀表达式转化为后缀表达式 3.后缀表达式的计算 我们的程序也是按照以上三个步骤进行的,具体的程序如下:// 基于 阅读全文

posted @ 2013-08-16 13:16 unixfy 阅读(589) 评论(0) 推荐(0) 编辑

四则运算的词法分析

摘要: 四则运算的词法分析 之前我们处理四则运算的方法有两种,第一种是对输入的格式强制限定运算符两边都有空白符,另一种是我们根据输入的字符串,对其中的运算符进行添加空白符预处理。通过添加空白符进行处理里显然不太规范和方便,真正需要做的应该是我们对输入的四则运算表达式进行词法分析,解析出相应的运算符和操作符,然后在进行中缀转后缀、后缀表达式的计算等过程。 我们的四则运算表达式只包含两种元素:操作符和操作数。 其中,操作符目前限定为+、-、*、/四种,另外还有括号:左括号和右括号。 操作数可以是小数也可以是整数。 操作符和操作数我们将其视为token,其对应的种别码分别为:tokenid+1-2*3/4( 阅读全文

posted @ 2013-08-16 11:02 unixfy 阅读(2171) 评论(0) 推荐(0) 编辑

导航