7-22 切分表达式——写个tokenizer吧 (20 分)
[先说点出题背景]
这个题是为低年级同学、学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<cctype>
#include<vector>
using namespace std;int main(){string s;cin >> s;vector<string> con;vector<string> result;for(int i = 0; i < s.size();i++){if(isdigit(s[i])){int index = i;int len = 0;while(isdigit(s[i++]));i--;string num = s.substr(index,i-index);con.push_back(num);}string t="";t+=s[i];con.push_back(t);}for(int i = 0; i < con.size(); i++){if(con[i] == "-" ){if(isdigit(con[i+1][0]) &&(i==0||!isdigit(con[i-1][0]))){result.push_back(con[i]+con[i+1]);i++;continue;}}if(i==0&&con[i]=="+"){result.push_back(con[i]+con[i+1]);i++;continue;}if(con[i] =="."){string a = result[result.size()-1];string decimal = con[i];string b = con[i+1];result[result.size()-1] = a+decimal+b;i+=2;}result.push_back(con[i]);}for(int i = 0; i < result.size(); i++){cout << result[i] << endl;}return 0;
}
7-22 切分表达式——写个tokenizer吧 (20 分)相关推荐
- 7-125 切分表达式——写个tokenizer吧 (20 分)
7-125 切分表达式--写个tokenizer吧 (20 分) [先说点出题背景] 这个题是为低年级同学.学C语言的同学准备的,因为,对这部分同学,这个题目编写起来略有一点复杂.如果是高年级.学过了 ...
- 1002 写出这个数 (20分)
1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10 ...
- C++学习之路 | PTA乙级—— 1002 写出这个数 (20分)(精简)
1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10 ...
- 【PAT乙】1002 写出这个数 (20分)
1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10 ...
- 1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 ...
- 满分简便解法:1002 写出这个数 (20分)
立志用更少的代码做更高效的表达 Pat乙级题解汇总-->传送门 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 ...
- 1002 写出这个数 (20分)-Java
题目 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10 100. 输出格式: 在 ...
- PAT 1002 写出这个数 (20分)(Java)
题目描述 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10的100次方. 输出格式: ...
- PAT1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
字符串处理 要注意strlen()函数的使用对象是char 数组:而且计算时候不会计算上后缀'\0 #include<iostream> #include<algorithm> ...
- 1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10的100次方 输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一 ...
最新文章
- HDU1081 (最大连续子序列/矩阵)
- java线程概念_《Java基础知识》Java线程的概念
- hdu 1598(最小生成树变形)
- smem – Linux 内存监视软件
- 用lsb_release -a 查看linux版本
- 记忆化搜索斐波那契c语言,记忆化搜索--优化斐波那契数列递归函数
- 狂神说Java学习笔记 Java基础
- hive分桶表join_Hive:JOIN及JOIN优化 2015.10.25
- 1040 最大公约数之和
- 电脑投屏电视怎么设置_手机投屏怎么设置全屏
- CnCerT.Net.SKiller工作原理
- Tegra X2 系统上安装 openpose
- 环境搭建以及一些命令的记录
- 云直播客户端4.0活动拍摄类直播与教学培训类直播测试
- 一个小型企业网络方案设计龙腾
- MacBook怎样装Win10 双系统玩转Win10
- Interproscan linux版本详细安装教程及运行报错解决方案
- 中国自动转换开关控制器行业市场供需与战略研究报告
- Java 9 - 说说响应式流
- 【OpenGL】平面法向量、顶点法向量的计算方法