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. ...
随机推荐
- documnent.getElementbyId(‘myId’)和$(‘#myId’)哪种更高效?
第一种更高效,直接调用javascript引擎.
- .net 日期格式转换
DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25dt.ToFileTime().ToString();//127756416 ...
- Codeforces Round #331 (Div. 2)
水 A - Wilbur and Swimming Pool 自从打完北京区域赛,对矩形有种莫名的恐惧.. #include <bits/stdc++.h> using namespace ...
- 简单几何(线段相交)+模拟 POJ 3449 Geometric Shapes
题目传送门 题意:给了若干个图形,问每个图形与哪些图形相交 分析:题目说白了就是处理出每个图形的线段,然后判断是否相交.但是读入输出巨恶心,就是个模拟题加上线段相交的判断,我第一次WA不知道输出要按字 ...
- MBR 基础
1.简介 MBR,全称为Master Boot Record,即硬盘的主引导记录,它位于整个硬盘的0磁道0柱面1扇区,其主要对硬盘进行了组织,是在驱动器最前端的一段引导扇区. MBR是不属于任何一个操 ...
- List.Sort以及快速排序ZZ
经常看到有人因为使用.net中的集合类处理海量数据时性能不够理想,就武断的得出.net不行,c#也不行这样的结论.对于.net framework这样的类库来说,除了性能以外,通用性和安全性同样重要, ...
- Rain on your Parade
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
- cocos2d ccmenulabel
// // TestMenu.hpp // mario // // Created by sun on 15/12/22. // // #ifndef TestMenu_hpp #define Tes ...
- lua ipairs
tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = ...
- unauthenticated user reading from net
今天有台数据库异常,登录服务器后执行show processlist,发现大量的 unauthenticated user 状态.如下: 于是第一时间想到DNS反向解析的问题,于是看看是否关闭DNS解 ...