[刷题] PTA 7-62 切分表达式 写个tokenizer吧
我的程序:
1 #include<stdio.h>
2 #include<string.h>
3 #define N 50
4 char token[]= {'+','-','*','/','(',')'};
5
6 int istoken(char c) {
7 int i;
8 for(i=0; i<strlen(token); i++) {
9 if(token[i]==c) return 1;
10 }
11 return 0;
12 }
13
14 int main() {
15 int i,j,t=0,flag=0;
16 char s[N],temp[N];
17 scanf("%s",s);
18 int len = strlen(s);
19 for(i=0; i<len; i++) {
20 //如果是减号且前面也是符号,则将减号作为后面数据的一部分
21 if((i==0 && s[i]=='-')||(istoken(s[i-1]) && s[i]=='-')) flag = 1;
22 //如果是符号,且不是上面的情况,则先打印符号前的数据,再打印符号
23 if(istoken(s[i]) && flag==0) {
24 for(j=0; j<t; j++) {
25 printf("%c",temp[j]);
26 }
27 //运算符紧跟括号时,不输出回车
28 if(t!=0)
29 printf("\n");
30 t=0;
31 //如果到末尾,则不输出回车
32 printf("%c",s[i]);
33 if(i!=len-1)
34 printf("\n");
35 } else {
36 temp[t]=s[i];
37 t++;
38 //flag清零
39 flag = 0;
40 //输出末尾的数据
41 if(i==len-1) {
42 for(j=0; j<t; j++) {
43 printf("%c",temp[j]);
44 }
45 }
46 }
47 }
48 }
(最后一个用例提示“格式错误”,没有找出bug)
网友“扯淡”的程序:
1 #include <stdio.h>
2 #include <string.h>
3 int main(){
4 char str[41], ch, flag=0;
5 int i=0;
6 scanf("%s", str);
7 int len=strlen(str);
8 printf("%c", str[0]);
9 for(i=1; i<len; i++){
10 if (str[i]>47 && str[i]<58 || str[i]=='.'){
11 if (flag)
12 printf("\n");
13 printf("%c", str[i]);
14 flag=0;
15 }else{
16 if (str[i-1]=='(' && str[i]=='-'){
17 printf("\n%c", str[i]);
18 flag=0;
19 }else{
20 printf("\n%c", str[i]);
21 flag=1;
22 }
23 }
24 }
25 return(0);
26 }
https://blog.csdn.net/qq_36589706/article/details/81081144
分析:
1、我是一开始就想的比较复杂,然后在测试中不断补漏洞;扯淡是一开始就想的很简单,只分成数值和非数值两种情况
2、程序构造的越抽象,细节越少,越不容易出错
3、从计算机的角度,而不是实际意义的角度出发思考问题
[刷题] PTA 7-62 切分表达式 写个tokenizer吧的更多相关文章
- pta习题集 5-10 切分表达式——写个tokenizer吧
[先说点出题背景] 这个题是为低年级同学.学C语言的同学准备的,因为,对这部分同学,这个题目编写起来略有一点复杂.如果是高年级.学过了正则表达式(Regular Expression)的同学或者学过了 ...
- [刷题] PTA 查验身份证
题目: 7-63 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5, ...
- [刷题] PTA 04-树4 是否同一棵二叉搜索树
程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef struct TreeNode *Tree; 4 struct ...
- [刷题] PTA 03-树2 List Leaves
程序: 1 #include <stdio.h> 2 #include <queue> 3 #define MaxTree 20 4 #define Null -1 5 usi ...
- [刷题] PTA 03-树1 树的同构
程序: 1 #include <stdio.h> 2 #define MaxTree 10 3 #define ElementType char 4 #define Tree int 5 ...
- #leetcode刷题之路10-正则表达式匹配
匹配应该覆盖整个字符串 (s) ,而不是部分字符串.说明:s 可能为空,且只包含从 a-z 的小写字母.p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *. 示例 1:输入:s = & ...
- [刷题] PTA 02-线性结构3 Reversing Linked List
链表逆序 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 using namesp ...
- [刷题] PTA 03-树3 Tree Traversals Again
用栈实现树遍历 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXSIZE 30 4 5 int Pre[MAXSIZ ...
- [刷题] PTA 7-61 找最长的字符串
程序: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 81 4 5 int main() { 6 char ch[N ...
随机推荐
- 基于ceph rbd 在kubernetes harbor 空间下创建动态存储
[root@bs-k8s-ceph ~]# ceph osd pool create harbor 128 Error ETIMEDOUT: crush test failed with -110: ...
- vmstat-观察进程上线文切换
vmstat 是一款指定采样周期和次数的功能性监测工具,我们可以看到,它不仅可以统计内存的使用情况,还可以观测到 CPU 的使用率.swap 的使用情况.但 vmstat 一般很少用来查看内存的使用情 ...
- [图论]牛的旅行 Cow Tours :Floyed-Warshall
牛的旅行 Cow Tours 目录 牛的旅行 Cow Tours 题目描述 输入格式 输出格式 输入输出样例 输入 #1 输出 #1 解析 代码 题目描述 农民 John的农场里有很多牧区.有的路径连 ...
- angularjs 图片上传
<input type="file" file-model="myFile"/><div class="col-md-12" ...
- Win10环境下YOLO5 快速配置与测试
目录 一.更换官方源 二.安装Pytorch+CUDA(python版本) 三.YOLO V5 配置与验证 四.数据集测试 五.小结 不想看前面,可以直接跳到标题: 一.更换官方源 在 YOLO V5 ...
- 201873030133-杨子豪 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 了解软件工程的作用与意义,将软件工程与过去所学相结合 这个作业在哪些方面帮助我实现学习目标 体验了结对式的 ...
- 宝塔linux7.4.2/windows6.8 的版本中的安全随笔
在2020/8.23宝塔官方发布了一条关于宝塔linux7.4.2和Windows6.8版本中存在的重大的安全隐患 通知来源https://www.bt.cn/bbs/thread-54644-1-1 ...
- Linux 查看GPU状态
Linux 查看GPU状态 nvidia-smi nvidia-smi是NVIDIA自带的一个命令可以详细的展示显卡的运行状态. gpustat gpustat是github上开源的一个小工具,对于v ...
- 「Spring Boot 2.4 新特性」启动耗时详细监控
背景 Spring Boot 项目随着项目开发过程中引入中间件数量的增加,启动耗时 逐渐增加. 笔者在 <Spring Boot 2.4.0 正式 GA,全面拥抱云原生>文章评论下发现了 ...
- 《MySQL必知必会》学习笔记整理
简介 此笔记只包含<MySQL必知必会>中部分章节的整理笔记.这部分章节主要是一些在<SQL必知必会>中并未讲解的独属于 MySQL 数据库的一些特性,如正则表达式.全文本搜索 ...