问题描述
这是一种算法,它接收字符串,将字符串转换为单独的运算符和操作数,然后重新排列字符串以使用堆栈在后缀中返回方程式。我认为该程序在组合令牌和返回正确的字符串时是正确的,但是在释放和内存泄漏方面存在一些问题。无论我做什么,我总是感觉到一个错误。 `
char *postfixToInfix( char *str )
{
Stack *s = createStack();
int numTokens = countTokens(str);
char **strTokens = tokenizeString(str);
for (int i = 0; i < numTokens; i++) {
if (strcmp("T",strTokens[i]) == 0 || strcmp("F",strTokens[i]) == 0) {
push(s,strTokens[i]);
}
else if (strcmp(strTokens[i],"NOT") == 0) {
char *op1 = pop(s);
strcat(strTokens[i]," ");
strcat(strTokens[i],op1);
strcat(strTokens[i]," )");
char place[50];
strcpy(place,strTokens[i]);
strcpy(op1,"( ");
strcat(op1,place);
push(s,op1);
}
else {
char *op2 = pop(s);
char *op1 = pop(s);
strcat(op1," ");
strcat(op1,strTokens[i]);
strcat(op1,op2);
strcat(op1,op1);
strcpy(op1,op1);
}
}
char *final = pop(s);
freeStackElements(s);
freeStack(s);
return final;
}
` 如果它是一元运算符,例如NOT,那么我只会从堆栈中弹出一个字符串。但是,如果它是任何其他运算符(COND,OR,AND等),则必须从堆栈中弹出两个字符串。程序运行的一个示例是获取等式 FTTTT nor XOR OR COND ,该等式将转换为(F COND(T OR(T XOR(T nor T))))正确时。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)