微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将后缀字符串转换为中缀字符串和内存问题

如何解决将后缀字符串转换为中缀字符串和内存问题

这是一种算法,它接收字符串,将字符串转换为单独的运算符和操作数,然后重新排列字符串以使用堆栈在后缀中返回方程式。我认为该程序在组合令牌和返回正确的字符串时是正确的,但是在释放和内存泄漏方面存在一些问题。无论我做什么,我总是感觉到一个错误。 `

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 举报,一经查实,本站将立刻删除。