我有一个将中缀表示法转换为后缀表示法的功能。我遇到的唯一问题是生成的后缀符号字符串的最后一个字符是
任何想法发生了什么?这是功能。如果我打印作为参数传递的中缀char *,它将被正确打印。当我在函数结束时打印postfix char *时,我得到了 为最后一个字符
#include <iostream>
#include <string>
#include <fstream>
#include <string.h>
#include <ctype.h>
#include "queue.h"
#include "stack.h"
#define EXPRESSION_MAX_SIZE 50
#define MAX 10
#define EMPTY -1
using namespace std;
struct stack
{
char data[MAX];
int top;
};
答案 0 :(得分:3)
你看到的胡言乱语可能是你在空堆栈上从EMPTY
返回的pop
常量。在assert(!isempty(s))
函数中粘贴pop
以确保您不会尝试从空堆栈弹出。如果在调试器中运行程序,调试器应该向您显示触发assert
的上下文(即堆栈跟踪)。
尝试从空容器弹出会显示程序中存在严重缺陷。你不应该只返回一个特殊的值,并希望被调用者不愿意检查它。当检测到这种错误时,明智的是“立即失败,然后大声失败”。这样可以更容易地找出错误原因。它还有助于确保在部署程序之前检测到错误。
答案 1 :(得分:2)
在main()中将line []复制到infix []:
for(unsigned int i=0; i<=line.size(); i++)
{
infix[i] = line[i];
}
完成复制后,您无法终止中缀数组。你看到的角色就是申报时的那些角色。