[先说点出题背景]

这个题是为低年级同学、学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 分)相关推荐

  1. 7-125 切分表达式——写个tokenizer吧 (20 分)

    7-125 切分表达式--写个tokenizer吧 (20 分) [先说点出题背景] 这个题是为低年级同学.学C语言的同学准备的,因为,对这部分同学,这个题目编写起来略有一点复杂.如果是高年级.学过了 ...

  2. 1002 写出这个数 (20分)

    1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10 ...

  3. C++学习之路 | PTA乙级—— 1002 写出这个数 (20分)(精简)

    1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10 ...

  4. 【PAT乙】1002 写出这个数 (20分)

    1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10 ...

  5. 1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

    1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 ...

  6. 满分简便解法:1002 写出这个数 (20分)

    立志用更少的代码做更高效的表达 Pat乙级题解汇总-->传送门 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 ...

  7. 1002 写出这个数 (20分)-Java

    题目 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10 ​100. 输出格式: 在 ...

  8. PAT 1002 写出这个数 (20分)(Java)

    题目描述   读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:   每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10的100次方. ​ 输出格式: ...

  9. PAT1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

    字符串处理  要注意strlen()函数的使用对象是char 数组:而且计算时候不会计算上后缀'\0 #include<iostream> #include<algorithm> ...

  10. 1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

    输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10的100次方 输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一 ...

最新文章

  1. HDU1081 (最大连续子序列/矩阵)
  2. java线程概念_《Java基础知识》Java线程的概念
  3. hdu 1598(最小生成树变形)
  4. smem – Linux 内存监视软件
  5. 用lsb_release -a 查看linux版本
  6. 记忆化搜索斐波那契c语言,记忆化搜索--优化斐波那契数列递归函数
  7. 狂神说Java学习笔记 Java基础
  8. hive分桶表join_Hive:JOIN及JOIN优化 2015.10.25
  9. 1040 最大公约数之和
  10. 电脑投屏电视怎么设置_手机投屏怎么设置全屏
  11. CnCerT.Net.SKiller工作原理
  12. Tegra X2 系统上安装 openpose
  13. 环境搭建以及一些命令的记录
  14. 云直播客户端4.0活动拍摄类直播与教学培训类直播测试
  15. 一个小型企业网络方案设计龙腾
  16. MacBook怎样装Win10 双系统玩转Win10
  17. Interproscan linux版本详细安装教程及运行报错解决方案
  18. 中国自动转换开关控制器行业市场供需与战略研究报告
  19. Java 9 - 说说响应式流
  20. 【OpenGL】平面法向量、顶点法向量的计算方法

热门文章

  1. 迭代求解最优化问题——步长确定
  2. ATT与intel汇编格式区分
  3. CentOS安装Nginx 报错“configure: error: the HTTP rewrite module requires the PCRE library”解决办法...
  4. 第四季-专题15-网卡驱动程序设计
  5. python基础--导入模块
  6. 高通又失一员大将,英特尔成功挖角高通CFO
  7. iptables 简介
  8. ORACLE数据类型与java数据类型对应
  9. UIButton 文字图片排列
  10. Android入门学习3