C-字符推送和弹出操作[关闭]

Posted

技术标签:

【中文标题】C-字符推送和弹出操作[关闭]【英文标题】:C- Character Push and Pop operation [closed] 【发布时间】:2018-06-12 16:31:06 【问题描述】:
Stack create(int c)

    Stack S=(Stack)malloc(sizeof(struct stack));

    S->size=c;
    S->top=-1;
    S->array=(char *)malloc(sizeof(char)*c);

    return S;


Stack makeEmpty(void)

    Stack *S1=create(100);
    S1[0]->top=-1;
    return S1;


char pop(Stack S)

    return S->array[S->top--];
;

int main(void)

    Stack *S1;
    S1=makeEmpty();
    int j;
    int k=0;
    char result[30];
    for(j=0; j<2; j++)
    
        char result1=pop(S1);
        strcat(result, result1);
        k++;
    

我跳过了一些部分,比如typedef struct stack Stack; 我想做的是在 for 循环工作时从堆栈中弹出元素。然后,将这些元素存储在一个新数组result 中。为了检查它是否有效,我打印出来但我遇到了运行时错误。如何存储元素以及如何打印出来?

【问题讨论】:

欢迎来到 Stack Overflow。请尽快阅读About 和How to Ask 页面,但更迫切地关注如何创建 MCVE (minimal reproducible example)。 “我有一个运行时错误”是对出错原因的骇人听闻的解释。到底发生了什么,你输入了什么?您显示的代码没有定义结构类型,也没有显示如何推送数据。大多数情况下,您应该预先递减堆栈指针,但这取决于...问题很可能出在您未显示的代码中,就像您显示的代码中一样。 我不明白你在问什么。此外,strcat 的签名是char *strcat(char *dest, const char *src);。你传递了一个char,你的编译器一定警告过你。 您的pop() 函数如何告诉您没有要弹出的字符?你还没有展示事情是如何被推送的,但我确实看到你在top 中有一个空堆栈的-1,所以S-&gt;top-- 不一定是错误的。 makeEmpty你有一个语法错误,S1[0]-&gt;top=-1;是错误的,应该是S1[0].top=-1;。你在发布之前编译你的东西吗?你读过编译器错误吗?此外,这样做毫无意义,create 调用已经将-1 分配给top 两个都试了,但是 S1[0].top=-1 编译出错了。 【参考方案1】:

我已经复制并粘贴了您的代码,但它没有被编译。我觉得 您要么不发布实际代码,要么不费心编译和阅读编译器警告。帮助你是相当困难的。以下是我注意到的一些事情:

1。 create 必须返回指向 Stack 的指针,而不是对象。

Stack *create(int c)

    Stack *S = malloc(sizeof *S);

    S->size=c;
    S->top=-1;
    S->array = malloc(c);

    return S;

2。 makeEmpty 也是如此

Stack *makeEmpty(void)

    Stack *S1=create(100);
    S1->top=-1;
    return S1;

3。 pop 应该得到一个指向 Stack 的指针,而不是对象

char pop(Stack *S)

    return S->array[S->top--];
;

在这里您应该检查堆栈中是否有元素。 int pop(Stack *S, char *val) 返回 1 并在 *val 上写入 成功,返回 0 否则会更好。

4。 从您的pop 来看,您只是在推动char。我不明白你的意思 正在尝试处理strcat。无论哪种方式,你都做错了strcat。你 正在声明一个包含 100 个空格的堆栈,但您只声明了 30 个空格 为result。如果堆栈中有超过 31 个元素怎么办?我知道 您只检查 2 个元素,但很容易忽略这一点并且 扩展它以遍历所有堆栈而不改变内存要求 为result

另外,strcat 是一个适用于 C-Strings 的函数,这意味着它期望 C弦。 C 字符串 必须\0 终止,而您的则不是。你有 看起来像 C-String 但不是的东西。如果你坚持使用 strcat,你应该这样做:

for(j=0; j<2; j++)

    char result1[] =  pop(S1), 0 ;
    strcat(result, result1);

【讨论】:

以上是关于C-字符推送和弹出操作[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java 堆栈 - 推送和弹出操作

如何同时关闭和弹出视图控制器

将子视图推送和弹出到堆栈的问题

关闭模态呈现的 VC 和弹出呈现的 VC

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

UIViewController 推送和弹出中的问题