0
중침 표기법을 후위 공 표식 (RPN)으로 변환하려고했습니다. 여기 중위에서 rpn 표현식을 작성하십시오.
String createRPN(String infix)
{
Stack *stack = node_alloc(1); //stack pointer
stack->next = NULL;
String ptr; //index
String RPN = malloc(strlen(infix) + 1);
String start = RPN;
for (ptr = infix; *ptr != '\0'; ptr++)
{
if (isNum(*ptr) || (*ptr == ' ')) *RPN++ = *ptr;
else if (*ptr == '(') push(&stack, '(');
else if (isOper(*ptr))
{
while ((stack != NULL) && (stack->value != '('))
{
if (compareOper(stack->value, *ptr)) *RPN++ = pop(&stack);
else break;
}
push(&stack, *ptr);
}
else if (*ptr == ')')
{
while ((stack != NULL) && (stack->value != '(')) *RPN++ = pop(&stack);
if (stack != NULL) pop(&stack);
}
else;
}
while (stack != NULL) *RPN++ = pop(&stack);
*RPN = '\0';
return start;
}
스택 코드 :
typedef struct node
{
int value;
struct node *next;
}Stack;
void push(Stack **node, int value)
{
Stack *temp = node_alloc(1);
if (temp == NULL) return;
temp->value = value;
temp->next = *node;
*node = temp;
}
int pop(Stack **node)
{
if (*node == NULL) return 0;
int num = (*node)->value;
Stack *temp = (*node)->next;
free(*node);
*node = (temp == NULL) ? NULL : temp;
return num;
}
하지만 난 예 중위 문자열을 입력 한 후 :
2 * ((3 + 5) + (6 + 2) * 5)
프로그램 충돌, 당신의 필요 여기 는 기능입니다 내 실수를 감지하는 데 도움이됩니다 ..
들으 보장 이후 (적),
sizeof (char)
곱 아무 소용이 없다,하지만 여전히 일을 해달라고, 그리고 문자열의 크기 (중온 표현식은 "()"을 가지고 후위 문자보다 크기가 더 크고 후위에 포함되어 있지 않습니다.) .. 그러나 실제 문제는 내가 알아 낸 실제 스크립트가 createRPN에서 문자열을 반환하지 않았기 때문에 변경되었지만 여전히 프로그램이 충돌합니다. .. – PieThon