7-8 切分表达式——写个tokenizer吧 (20 分)
1.题目描述:
[先说点出题背景]
这个题是为低年级同学、学C语言的同学准备的,因为,对这部分同学,这个题目编写起来略有一点复杂。如果是高年级、学过了正则表达式(Regular Expression)的同学或者学过了Java等OO语言的同学做这个题,应当发现这题比较简单吧。哦,对了,什么是tokenizer?请自行查询解决。反正在此处不应翻译成“令牌解析器”。
[正题]
四则运算表达式由运算数(必定包含数字,可能包含正或负符号、小数点)、运算符(包括+、-、*、/)以及小括号((和))组成,每个运算数、运算符和括号都是一个token(标记)。现在,对于给定的一个四则运算表达式,请把她的每个token切分出来。题目保证给定的表达式是正确的,不需要做有效性检查。
输入格式:
在一行中给出长度不超过40个字符的表达式,其中没有空格,仅由上文中token的字符组成
输出格式:
依次输出表达式中的tokens,每个token占一行。
输入样例:
32*((2-2)+5)/(-15)
输出样例:
32
*
(
(
2
-
2
)
+
5
)
/
(
-15
)
注意:
当"+"符号在数字前时,应该输出+数字。
如下图:

代码展示:
1.本人代码(比较菜):
#include<iostream>
using namespace std;
int main(){
string s;
cin>>s;
for(int i=0;s[i];i++){
int flag=1;
if(s[i]=='+'&&i!=0)cout<<"+";
else if(s[i]=='+'&&i==0){
cout<<"+";
flag=0;
}
else ;
if(s[i]=='*')cout<<"*";
if(s[i]=='/')cout<<"/";
if(s[i]=='(')cout<<"(";
if(s[i]==')')cout<<")";
//cout<<"$"<<flag<<endl;
if(s[i]-'0'>=0&&s[i]-'0'<=9){
for(int j=i;;j++,i++){
if((s[j]-'0'>=0&&s[j]-'0'<=9)||(s[j]=='.'))cout<<s[j];
else break;
}
i--;
cout<<endl;
continue;
}
if(s[i]=='-'){
cout<<"-";
if(s[i-1]=='(' || i==0){
for(int j=i+1;;j++,i++){
if((s[j]-'0'>=0&&s[j]-'0'<=9)||(s[j]=='.'))cout<<s[j];
else break;
}
cout<<endl;
continue;
}
cout<<endl;
continue;
}
if(flag)
cout<<endl;
}
return 0;
}
2.大佬代码(属实牛逼):
#include<iostream>
using namespace std;
int main(){
string s;
cin>>s;
for(int i=0;s[i];i++){
cout<<s[i];
//如果第一个字符是-或者+,并且是第一个字符或者字符的前面是',就不换行
if(s[i]=='+'||s[i]=='-'){
if(i==0||s[i-1]=='(');
else cout<<endl;
}
//如果字符是数字,并且该字符的后一位是数字或者小数点,就不换行,否则就换行
else if(s[i]>='0'&&s[i]<='9'){
if(s[i+1]>='0'&&s[i+1]<='9'||s[i+1]=='.');
else cout<<endl;
}
//如果字符是小数点,就不换行
else if(s[i]=='.');
else cout<<endl;
}
return 0;
}
原题链接:PTA | 程序设计类实验辅助教学平台
7-8 切分表达式——写个tokenizer吧 (20 分)的更多相关文章
- pta习题集 5-10 切分表达式——写个tokenizer吧
[先说点出题背景] 这个题是为低年级同学.学C语言的同学准备的,因为,对这部分同学,这个题目编写起来略有一点复杂.如果是高年级.学过了正则表达式(Regular Expression)的同学或者学过了 ...
- [刷题] PTA 7-62 切分表达式 写个tokenizer吧
我的程序: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 50 4 char token[]= {'+','-',' ...
- PTA1002 写出这个数 (20 分)
1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1 ...
- PAT Basic 1002 写出这个数 (20 分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内输出 n 的 ...
- 1002 写出这个数 (20 分) java解题
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10^100. 输出格式: 在一行内输 ...
- PAT-字符串处理-B 1002 写出这个数 (20分)
题目: 思路: 先用字符串数组存储输入数字,然后依据num[i]-'0'对输入数字求和.然后对求和后的数字,进行分割,存储到数组中,然后遍历数组,依据存储汉语拼音的字符串二维数组进行输出 注意点: 注 ...
- pintia 3-7-5 逆波兰表达式求值 (20 分)
3-7-5 逆波兰表达式求值 (20 分) 逆波兰表示法是一种将运算符(operator)写在操作数(operand)后面 的描述程序(算式)的方法.举个例子,我们平常用中缀表示法描述的算式(1 + ...
- PAT乙级 1002. 写出这个数 (20)
1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...
- PAT-乙级-1002. 写出这个数 (20)
1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...
- [C++]PAT乙级1002.写出这个数(20/20)
/* 1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100. ...
随机推荐
- 【AI 全栈 SOTA 综述 】这些你都不知道,怎么敢说会 AI?【语音识别原理 + 实战】
章目录 前言语音识别原理 信号处理,声学特征提取 识别字符,组成文本 声学模型 语言模型 词汇模型语音声学特征提取:MFCC和LogFBank算法的原理实战一 ASR语音识别模型 ...
- SpringBoot——MVC原理
更多内容,前往 IT-BLOG 一.SpringMVC自动配置 SpringMVC auto-configuration:SpringBoot 自动配置好了SpringMVC.以下是 SpringBo ...
- DDD架构中的领域是什么?
DDD架构中的领域是什么? 我们经常说到DDD分层架构(领域驱动设计),那么究竟什么是DDD架构?如果去网上查通常会告诉你告诉你区别于过去的三层架构思想,DDD(领域驱动设计)是一种四层架构,一般 ...
- .Net 6.0定义全局当前身份缓存对象
背景: 当前身份缓存对象顾名思义就是:当前登录的用户身份对象,那它解决了什么问题呢?其实在我们日常开发过程中经常能用的到几乎是必备的,就比如我给某个表插入数据时需要创建人或者一些权限的访问,都得用到当 ...
- 深入理解 python 虚拟机:pyc 文件结构
深入理解 python 虚拟机:pyc 文件结构 在本篇文章当中主要给大家介绍一下 .py 文件在被编译之后对应的 pyc 文件结构,pyc 文件当中的一个核心内容就是 python 字节码. pyc ...
- 关于关键字final用法以及意义
* * 1.final可以用来修饰的结构:类.方法.变量 * * 2.final用来修饰一个类:此类不能被其他类所继承. * 比如:String类.System类.St ...
- stm32的学习笔记1
一 目录结构管理 Libraries是放官方固件库的 MDK-ARM是放产生的文件的,工程存放的目录 USERS是放自己写的代码的 然后是一个解释文件README 在MDK-ARM目录里还要创建两个文 ...
- [Java EE] java.net.SocketException: Connection reset【解决中】
1 错误描述 6:44:33.112] [DEBUG] [http-nio-9527-exec-3] [HttpClientUtil] http post url:http://bdp-gateway ...
- [数据库/MySQL]数据类型:enum 枚举类型
1 需求描述 场景 性别(gender) :男 / 女 / 保密 2 基本语法 enum(枚举值 1,枚举值 2...); 枚举值列表在 255 个以内,使用 1 个字节来存储 枚举值列表超过 255 ...
- Intellij_idea for循环 快捷键
for循环四次.用 i 进行for循环 4.for fori 增强for循环 int [] arrays=new int[2]; arrays.for