v2.0
#include <stdio.h>
#include <string.h>
#include <ctype.h>
typedef struct node
{
char list[81];
int tempi;
}sentance;//分离出一个个关键字所用临时结构
void printch(char stack[][10],int top);
int main()
{
sentance one,two,three;
char whole[800];//存放用户输入数据
char word=NULL;
char stack[800][10];//存放关键字以及变量的栈
int top=-1;
int i=1;
one.tempi=two.tempi=three.tempi=0;
printf("Please input the code and end with the '#':");
while(word!='#')
{
i=1;
gets(whole);
word=whole[0];//将字符串第一个字符赋给word
while(word!='#')
{
while(ispunct(word)&&(word!='#'))
{
two.list[two.tempi]=word;
two.tempi++;
word=whole[i];//i是以1开始,所以whole[i]是下一个字符
i++;
if(two.list[two.tempi-1]!=':'&&two.list[two.tempi-1]!='<'&&two.list[two.tempi-1]!='>')//若果不是这三个符号,则直接入栈
{
two.list[two.tempi]='\0';
top++;
strcpy(stack[top],two.list);
two.tempi=0;
}
else if(word=='='&&two.list[two.tempi-1]==':'||word=='='&&two.list[two.tempi-1]=='<'||word=='='&&two.list[two.tempi- 1]=='>'||word=='>'&&two.list[two.tempi-1]=='<')//比较是否为双标点情况
{
two.list[two.tempi]=word;
two.list[two.tempi+1]='\0';
top++;
strcpy(stack[top],two.list);
two.tempi=0;
word=whole[i];//将下一个字符赋给word
i++;//i指向下一个字符
}
else//当下一个字符没有组成双标点,则入栈
{
two.list[two.tempi]='\0';
top++;
strcpy(stack[top],two.list);
two.tempi=0;
}
}
while(isalpha(word)&&(word!='#'))
{
one.list[one.tempi]=word;
one.tempi++;
word=whole[i];
i++;
if(!(isalpha(word)))
{
one.list[one.tempi]='\0';
top++;
strcpy(stack[top],one.list);
one.tempi=0;
}
}
while(isdigit(word))
{
three.list[three.tempi]=word;
three.tempi++;
word=whole[i];
i++;
if(!(isdigit(word)))
{
three.list[three.tempi]='\0';
top++;
strcpy(stack[top],three.list);
three.tempi=0;
}
}
if(word==' ')//忽略空格
{
word=whole[i];
i++;
}
if(word=='\0')//遇到结束符跳出循环
break;
}
}
if(top!=-1)//如果栈里无元素,则函数结束
printch(stack,top);
return 0;
}
void printch(char stack[][10],int top)
{
char clist[][6]={"begin","if","then","while","do","end","","","","","","","+","-","*","/",":",":=","","<","<=","<>",">",">=","=",";","(",")","#"};
int i,k;
for(k=0;k<=top;k++)
{
if(strlen(stack[k])!=0)
{
if(stack[k][0]>='0'&&stack[k][0]<='9')//数字的输出
{
printf("<11,\"%s\">\n",stack[k]);
continue;//如果是数字则continue循环
}
for(i=0;i<=28;i++)
{
if(strcmp(clist[i],stack[k])==0)
{
printf("<%d,\"%s\">\n",i+1,stack[k]);//关键字的输出
break;
}
if(i==28)//找不到相同的字符串,则作为一个变量输出
{
printf("<10,\"%s\">\n",stack[k]);
}
}
}
}
}
v2.0的更多相关文章
- 《我常用的股票投资工具与网站》v2.0
<我常用的股票投资工具与网站>v2.0 王大海 职业投资,抽空做一点分享. 661 人赞同了该文章 "少年你好,想不到你竟有如此因缘际会看到这里.我看你骨骼精奇,定是万中无一的交 ...
- 常用HTML meta 标签属性(网站兼容与优化需要),meta标签
常用HTML meta 标签属性(网站兼容与优化需要),meta标签 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索 ...
- [python]爬代理ip v2.0(未完待续)
爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...
- Atitit jquery 1.4--v1.11 v1.12 v2.0 3.0 的新特性
Atitit jquery 1.4--v1.11 v1.12 v2.0 3.0 的新特性 1.1. Jquery1.12 jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.h ...
- 运维工程师打怪升级进阶之路 V2.0
在此之前,发布过两个版本: 运维工程师打怪升级之路 V1.0 版本发布 运维工程师打怪升级必经之路 V1.0.1 很多读者伙伴们反应总结的很系统.很全面,无论是0基础初学者,还是有基础的入门者,或者是 ...
- 【JS】heatmap.js v1.0 到 v2.0,详细总结一下:)
前段时间,项目要开发热力图插件,研究了heatmap.js,打算好好总结一下. 本文主要有以下几部分内容: 部分源码理解 如何迁移到v2.0 v2.0官方文档译文 关于heatmap.js介绍,请看这 ...
- 怎样在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块
因为项目的需要,所以研究了一下自动生成测试代码.将经验记录下来,总会有用的.我个人认为,好记性不如多做笔记多反思总结. 1. 前提条件 开发环境已正确配置 工程已解决JUnit依赖关系(pom ...
- 转发 win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案
win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NE ...
- Heatmap.js v2.0 – 最强大的 Web 动态热图
Heatmap 是用来呈现一定区域内的统计度量,最常见的网站访问热力图就是以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示.Heatmap.js 这个 JavaScript 库可以实现 ...
- 数据获取以及处理系统 --- 功能规格说明书V2.0
产品规格说明书: 版本号: V2.0 版本说明: Version 1.0 简单得需求分析以及构思,初稿形成 Version 2.0 细化beta阶段设计,增加典型用户尝尽以及功能罗列 1. 引言 1. ...
随机推荐
- eclipse中编译时enum出现cannot be resolved to a type错误
eclipse中编译时enum出现cannot be resolved to a type错误 通常是因为eclise使用的jdk版本的问题...默认是使用的是jdk1.5 应该去选择成jdk1.6或 ...
- Spring的replace-method标签
Spring的解析源码 public void parseReplacedMethodSubElements(Element beanEle, MethodOverrides overrides) { ...
- documnent.getElementbyId(‘myId’)和$(‘#myId’)哪种更高效?
第一种更高效,直接调用javascript引擎.
- 理解Null,Undefined,NAN
1.null表示尚未存在的对象,转为数值时为0.它表示"没有对象",即该处不应该有值,常用来表示函数企图返回一个不存在的对象.null是一种特殊的object(引用类型),代表一个 ...
- pda完美结合开销售单据haohantech-安卓打票扫描PDA智能POS 发展现状如何,会取代传统电脑 代替手工开单 么?
现场开单时指业务员每天到终端客户的现场进行谈单和接单的动作流程,现场开单一般主要是集中在BCD类门店和一些批发零售小店 现场开单的优势:现场开单可以及时掌控终端客户情况,促进客情关系,提高产品的铺市率 ...
- pingpang ball
#pragma strict var smooth=2.0; var tiltAngle=30.0; function Start () { } function Update () { transf ...
- BZOJ2310 : ParkII
单路径最大和问题,设f[i][j][S]表示到达(i,j),轮廓线状态为S的最优解. S用4进制m+1位数表示,0表示无插头,1表示左括号,2表示右括号,3表示独立插头. 在DP之前先进行一次预处理, ...
- BJOI2015 Day1
本以为会是三道小强与阿米巴,结果打开题目一看发现了这个: T1: 恩先写着一道 #include<cstdio> #include<cstring> #include<c ...
- get和post方法的区别
在form表单提交数据的过程中,method属性提供了两个值:get,post,默认为get方式[参1] 即一种为get提交,一种是post提交.那么这两种提交方式有什么不同呢? 查询了一些资料后,总 ...
- More about Tair (NoSql)
一.前言 关于Tair的相关介绍请参照wiki(http://code.taobao.org/p/tair/wiki/index/)或者之前的博文,不再重复描述.区别于其它主流NoSql数据库,Tai ...