无法使用堆栈分隔表达式

阳光

我想获得解决我的问题的帮助。我有一个表达式作为char序列,我想使用堆栈将其分离,我将该表达式拆分为每个操作数和运算符,它们中的每一个都是序列,我想将其压入堆栈。问题是当我尝试在分离后打印表达式时,只有运算符可以正确显示,但操作数不正确。它们仅显示与top元素相同的操作数值。我不知道为什么,这是我的代码,请帮助我检查一下。太感谢了!

#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");
}
Perreal

这是因为您使用相同的存储位置temp来存储所有数字序列。这也是错误的,因为它temp是函数的本地函数,并且&temp[0]separate函数外部未定义对指针()的任何访问使用malloc和strcpy创建一个新字符串并将temp复制到其中。然后推这个新的字符串。或者,您可以使用atoi创建一个整数并压入它而不是压入字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用堆栈的C ++后缀表达式

来自分类Dev

是否可以仅使用lambda表达式实现堆栈?

来自分类Dev

是否可以仅使用lambda表达式实现堆栈?

来自分类Dev

使用数组和堆栈递归计算表达式

来自分类Dev

无法使用表达式比较NAN

来自分类Dev

无法使用s表达式

来自分类Dev

无法使用表达式比较NAN

来自分类Dev

无法在Scala中使用表达式“ _ =>”

来自分类Dev

在标签错误的`|分隔`使用正则表达式蟒蛇

来自分类Dev

使用正则表达式分隔列

来自分类Dev

尝试使用正则表达式来分隔单词

来自分类Dev

在grok表达式之间使用分隔符

来自分类Dev

如何使用正则表达式分隔名称?

来自分类Dev

使用分隔符进行正则表达式拆分,同时保留分隔符

来自分类Dev

分隔路径的正则表达式

来自分类Dev

逗号分隔的正则表达式

来自分类Dev

正则表达式-分隔数字

来自分类Dev

用正则表达式“。”分隔。

来自分类Dev

处理器是否使用多个堆栈来将调用堆栈与表达式/寄存器堆栈分开?

来自分类Dev

由于当前线程处于堆栈溢出状态,因此无法求值表达式。(C#)

来自分类Dev

由于get函数中的堆栈溢出,无法评估表达式

来自分类Dev

无法使用PCRE表达式的C ++正则表达式?

来自分类Dev

致命错误:无法使用isset,使用空表达式

来自分类Dev

正则表达式提前无法在.NET中使用

来自分类Dev

SFINAE表达式无法使用clang编译

来自分类Dev

使用正则表达式无法匹配版本

来自分类Dev

Python,如果表达式无法正确使用原始输入

来自分类Dev

在Thymeleaf / Spring4中无法使用表达式

来自分类Dev

致命错误:无法在表达式的结果上使用isset()

Related 相关文章

热门标签

归档