문제점을 해결하는 데 도움을 얻고 싶습니다. 나는 문자 시퀀스로서 표현식을 가지고 있는데, 나는 그것을 스택을 사용하여 분리하기를 원한다.이 표현식을 모든 피연산자와 연산자로 나눈다. 각각의 시퀀스는 순차적이며 스택으로 밀어 넣기를 원한다. 문제는 분리 한 후 표현식을 인쇄하려고 할 때 연산자 만 올바르게 표시되지만 피연산자가 올바르지 않은 것입니다. 최상위 요소와 동일한 피연산자 값만 표시합니다. 이유는 모르겠지만 이것이 내 코드입니다. 제발 저를 확인하도록 도와주세요. 정말 고맙습니다!스택을 사용하여 표현을 분리 할 수 없습니다.
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#define SIZE 100
typedef struct Stack{
int top;
char *data[9];
}Stack;
void init(Stack *s){
s->top = 0;
}
void push(Stack *s, char *value){
if(s->top < SIZE)
s->data[s->top++] = value;
else
printf("stack is full");
}
bool isDigit(char s){
if(s>='0' && s<='9')
return true;
return false;
}
void separate(Stack *exp,char *s){
char temp[9];
int n = strlen(s);
int l = 0,size=0;
for(int i = 0;i<n;i++){
if(isDigit(s[i])){
temp[l++]=s[i];
}
else{
if(l!=0){
temp[l]='\0';
push(exp,temp);
l=0;
}
char *c= (char*)malloc(sizeof(char));
sprintf(c,"%c",s[i]);
push(exp,c);
}
}
temp[l]='\0';
push(exp,temp);
}
void main(){
Stack *s = (Stack*)malloc(sizeof(Stack));
init(s);
char expression[100];
printf("Enter your expression, for exp: 2-33/134+8\n");
gets(expression);
separate(s,expression);
int size = s->top;
printf("\nsize = %d",size);
printf("\nElements of stack are");
for(int i = 0;i<size;i++)
printf("\n %s",s->data[i]);
system("pause");
}
스택 오버플로에 오신 것을 환영합니다. 곧 [About] 페이지를 읽으십시오. '#include'등을 표준 헤더 (작성한 헤더가 아닌 시스템이 제공 한 헤더)에 대해 큰 따옴표가 아닌 꺽쇠 괄호로 묶어 사용하십시오. '#include '을 사용하지 말고 - 이미 사용 하듯이'#include '을 대신 사용하십시오. ''헤더는 메모리 할당 코드의 동작을 가져오고'-lmalloc'을 사용하여 메모리 할당 코드의 제어 가능한 버전을 수집 할 때만 관련이 있습니다. –