7-20 表达式转换 (25 分)
历时三个半小时终于完成。
这道题的难点主要是在处理数字前的正负号上,同时还应该注意数字有小数点并且不是一位数字。
因为在做题之前同学给我说过这道题,也知道几个坑,所以做题的过程比较顺利。
我的步骤如下:
1、先完成不考虑数字前的正负号的程序。
2、考虑数字前的正负号,完善程序。
通过上面的步骤,做题的过程比较的顺利,把难题变成了简单的的题目。
在第二步的时候比较烧脑,因为我的想法比较简单,就是把所有的可能全都列出来,所以要花很多的时间考虑,验证。
总结
1、考虑问题要全面,在数字前正负号时要尽量列出所有的可能。
2、开始做题时有一个大体的思路就行,不必考虑的很周到。
3、要善于猜测试点。。在考试时测试点不会告诉我们,而是需要自己取探索。
坑
**这个题的一个坑就是,会在有的正数前加正号,但输出的时候不用输出正号。**我就一直没过这个测试点,直到搜到了测试数据。
AC代码
#include <stdio.h>
#include <stdlib.h>
/**
* 带有头结点
*/
typedef struct Node *Stack;
struct Node{
char s;
Stack Next;
};
//操作
Stack CreateStack(); //初始化栈
void Push(Stack p,char str); //入栈
int IsEmpty(Stack p); //判断是不是为空
char Pop(Stack p); //出栈
char GetTop(Stack p); //得到栈顶元素
void majoy(Stack p,char *s); //后缀表达式
int main()
{
Stack p = CreateStack();
char S[50] = {
0};
scanf("%[^\n]",S);
majoy(p,S); //得到后缀表达式
system("pause");
return 0;
}
//后缀表达式
void majoy(Stack p,char *S)
{
int flag = 0;
char *ptr = S;
while(*ptr)
{
//处理数字
if((*ptr >= '0' && *