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. ...
随机推荐
- 洛谷 P1019 单词接龙 Label:dfs
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- 【BZOJ】1015: [JSOI2008]星球大战starwar(并查集)
http://www.lydsy.com/JudgeOnline/problem.php?id=1015 看了题解的囧T_T,一开始以为是求割点,但是想到割点不能统计.... 这题用并查集,思想很巧妙 ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...
- COJ976 WZJ的数据结构(负二十四)
试题描述 输入一个字符串S,回答Q次问题,给你l,r,输出从Sl--Sr组成的串在S中出现了多少次. 输入 第一行为一个字符串S.第二行为一个正整数Q.接下来Q行每行为l,r. 输出 对于每个询问,输 ...
- edtftpj让Java上传FTP文件支持断点续传
在用Java实现FTP上传文件功能时,特别是上传大文件的时候,可以需要这样的功能:程序在上传的过程中意外终止了,文件传了一大半,想从断掉了地方继续传:或者想做类似迅雷下载类似的功能,文件太大,今天传一 ...
- shell中的case语句
case语法: case $arg in arg1) 语句1 ;; arg2) 语句2 ;; *) help 语句 ;; esac eg: eg:
- 简单查看tomcat中部署java服务的内存使用情况
vim tomcat_mem.sh NAME=$1 #部署项目名称 #PID=`ps -ef|grep tomcat|grep $NAME|awk '{print $2}'` PID=`ps -ef| ...
- spark Using MLLib in Scala/Java/Python
Using MLLib in ScalaFollowing code snippets can be executed in spark-shell. Binary ClassificationThe ...
- HTML5 挖宝
http://geek.csdn.net/news/detail/91536 http://mozilla.com.cn/thread-360325-1-1.html
- Sublime之旅
安装 http://www.sublimetext.com/3 常用操作 window版本 CTRL + P 打开文件搜索 Ctrl+K+B 打开目录树 Ctrl+Shift+[ ...