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. ...
随机推荐
- mvc-1mvc和类(2)
添加私有函数 var Person = function() {}; (function() { var findById = function(){}; Person.find = function ...
- Arduino可穿戴开发入门教程(大学霸内部资料)
Arduino可穿戴开发入门教程(大学霸内部资料) 试读下载地址:链接:http://pan.baidu.com/s/1mg9To28 密码:z5v8 介绍:Arduino可穿戴开发入门教程(大学霸内 ...
- 微信公众平台开发:Web App开发入门
WebApp与Native App有何区别呢?Native App:1.开发成本非常大.一般使用的开发语言为JAVA.C++.Objective-C.2.更新体验较差.同时也比较麻烦.每一次发布新的版 ...
- 【BZOJ】1303: [CQOI2009]中位数图(特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1303 依旧是题解流,,,不看题解没法活,,,第一眼就是瞎搞,然后就是暴力,显然TLE..题解啊题解. ...
- [转]单例模式——C++实现自动释放单例类的实例
[转]单例模式——C++实现自动释放单例类的实例 http://www.cnblogs.com/wxxweb/archive/2011/04/15/2017088.html http://blog.s ...
- 【Linux】linux常用基本命令(转)
(转自:http://blog.csdn.net/xiaoguaihai/article/details/8705992) Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用 ...
- JQuery获取和设置Select选项常用方法总结 (转)
1.获取select 选中的 text: $("#cusChildTypeId").find("option:selected").text(); $(&quo ...
- SQL中的charindex()方法
CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置.CHARINDEX函数调用方法如下: CHARINDEX ( expression1 , expression2 [ , start ...
- 发生了COMException 异常来自 HRESULT:0x80040228
异常信息: 发生了COMException 异常来自 HRESULT:0x80040228 原因解决方法:窗体中忘记放LicenseControl控件.,加上LicenseControl即可
- Android Studio 想说爱你不容易
开始使用Android Studio 真是非常痛苦的一段经历,而这一切的根源就在于GFW,俗称“墙” 如果避过墙来安装 AS,其实我已经在另外一篇文章中说明:http://www.cnblogs.co ...