[先说点出题背景]

这个题是为低年级同学、学C语言的同学准备的,因为,对这部分同学,这个题目编写起来略有一点复杂。如果是高年级、学过了正则表达式(Regular Expression)的同学或者学过了Java等OO语言的同学做这个题,应当发现这题比较简单吧。哦,对了,什么是tokenizer?请自行查询解决。反正在此处不应翻译成“令牌解析器”。

[正题]

四则运算表达式由运算数(必定包含数字,可能包含正或负符号、小数点)、运算符(包括+、-、*、/)以及小括号((和))组成,每个运算数、运算符和括号都是一个token(标记)。现在,对于给定的一个四则运算表达式,请把她的每个token切分出来。题目保证给定的表达式是正确的,不需要做有效性检查。

输入格式:

在一行中给出长度不超过40个字符的表达式,其中没有空格,仅由上文中token的字符组成

输出格式:

依次输出表达式中的tokens,每个token占一行。

输入样例:

32*((2-2)+5)/(-15)

输出样例:

32
*
(
(
2
-
2
)
+
5
)
/
(
-15
)

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string>
#include <map> using namespace std;
char a[55];
int main()
{
gets(a);
int len=strlen(a);
string s;
for(int i=0;i<len;i++)
{
if((a[i]>='0'&&a[i]<='9')||a[i]=='.')
{
s+=a[i];
}
else if(a[i]=='-')
{
if((a[i-1]>='0'&&a[i-1]<='9'&&i!=0)||a[i+1]=='(')
{
if(s!="")
{
cout<<s<<endl;
s="";
}
cout<<a[i]<<endl;
}
else
s+=a[i];
}
else if(a[i]=='+')
{
if(i==0)
s+=a[i];
else
{
if(s!="")
{
cout<<s<<endl;
s="";
}
cout<<a[i]<<endl; }
}
else if(a[i]=='*'||a[i]=='/'||a[i]=='('||a[i]==')')
{
if(s!="")
{
cout<<s<<endl;
s="";
}
cout<<a[i]<<endl;
} }
return 0; }

pta习题集 5-10 切分表达式——写个tokenizer吧的更多相关文章

  1. [刷题] PTA 7-62 切分表达式 写个tokenizer吧

    我的程序: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 50 4 char token[]= {'+','-',' ...

  2. 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)

    Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...

  3. lambda表达式——写多线程

    JDK1.8 中Lambda 表达式的出现,基本可以取替原来的匿名类实现多线程的方式.下面列举常用的常用的三种情况. 一.普通开启异步线程   new Thread(() -> System.o ...

  4. 【LeetCode】从contest-21开始。(一般是10个contest写一篇文章)

    [LeetCode Weekly Contest 29][2017/04/23] 第17周 Binary Tree Tilt (3) Array Partition I (6) Longest Lin ...

  5. 【Leetcode周赛】从contest-71开始。(一般是10个contest写一篇文章)

    Contest 71 () Contest 72 () Contest 73 (2019年1月30日模拟) 链接:https://leetcode.com/contest/weekly-contest ...

  6. 【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)

    Contest 81 (2018年11月8日,周四,凌晨) 链接:https://leetcode.com/contest/weekly-contest-81 比赛情况记录:结果:3/4, ranki ...

  7. 【Leetcode周赛】从contest-91开始。(一般是10个contest写一篇文章)

    Contest 91 (2018年10月24日,周三) 链接:https://leetcode.com/contest/weekly-contest-91/ 模拟比赛情况记录:第一题柠檬摊的那题6分钟 ...

  8. 【Leetcode周赛】从contest-121开始。(一般是10个contest写一篇文章)

    Contest 121 (题号981-984)(2019年1月27日) 链接:https://leetcode.com/contest/weekly-contest-121 总结:2019年2月22日 ...

  9. 10. Lambda表达式.md

    为了简化匿名内部类的代码,具体定义: 例如将9.内部类中的匿名内部类例子: 原来代码: //Main.java public class Main { public static void main( ...

随机推荐

  1. Swing组件都采用MVC设计模式

    Swing组件都采用MVC(Model-View-Controller,既模型-视图-控制器)设计模式,从而可以实现GUI组件的显示逻辑和数据逻辑的分离,允许程序员自定义Render来改变GUI组件的 ...

  2. URI、URL和URN之间的区别

    URI标识一个事物,URL定位一个事物:然而,位置同样可以标识一个事物,所以,每个URL都是一个 URI,但一个URI并不一定是一个URL. 举例说明 罗杰·佩特 这是我的名字,这是一个标识.它就像一 ...

  3. linux下简单好用的端口映射转发工具rinetd 转

    linux下简单好用的工具rinetd,实现端口映射/转发/重定向 官网地址http://www.boutell.com/rinetd 软件下载 wget http://www.boutell.com ...

  4. openal 基础知识3

    四创新科技extension (Creative Labs'Extensions) 创新科技为OpenAL添加了多个extensions,许多都利用了他们声卡的特性. “Enumerate All”e ...

  5. 对sssp项目搭建的补充,总错误处理。

    总错误处理,是为了在程序运行时代码出错能及时在控制台看出错误信息. 1. springMVC配置文件中: -------- 2.controller包中: 新建类FrameControllerAdvi ...

  6. 如何让View一直沿z轴旋转

    #import <QuartzCore/QuartzCore.h>... CABasicAnimation *rotationAni = [CABasicAnimation animati ...

  7. UGUI之Canvas Group

    可以通过Canvas Group影响该组UI元素的部分性质,而不需要费力的对该组UI下的每个元素逐个调整.Canvas Group是同时作用于该组UI下的全部元素. 参数:Alpha:该组UI元素的透 ...

  8. MathType编辑指数的方法

    利用MathType编辑公式使得在文档中编辑理工类的论文工作减轻了不少,它所包含的符号与模板基本都可以满足我们日常工作学习中对公式的需要.在文档中编辑数学物理符号或者是函数表达式,都是用word公式编 ...

  9. Int 型数值存储

    1. Int 在计算机中占 4 Byte, 共 32 位, 最大正数为 2147483647, 最小负数为 -2147483648 2. 正数存储在计算机中的形式为原码,最大正数的十六进制形式为 0X ...

  10. swift - UITextView的用法

    1,多行文本控件的创建 textView.frame = CGRect(x:50,y:180,width:self.view.bounds.size.width - 100,height:50) te ...