gpt4 book ai didi

c - 反向抛光转换器

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:52 25 4
gpt4 key购买 nike

我正在尝试制作可以执行以下操作的反向波兰打印机-

输入:

  1. (a+(b*c))
  2. ((a+b)*(z+x))
  3. ((a+t)*((b+(a+c))^(c+d)))

输出:

  1. abc*+
  2. ab+zx+*
  3. at+bac++cd+^*

这是我的代码:

#include <stdio.h>
#include <string.h>
char pop(int t);
void push(int c, int t);
int main()
{
int z;
scanf("%d", &z);
char *a[100];
int i = 0;
int q = z;
while (q-- > 0)
{
char v[400];
scanf("%s", &v);
int t;
for (t = 0; t < strlen(v); t++) //loop to put the values and signs in the 2 stacks
{
if ((v[t] == '*') || (v[t] == '+') || (v[t] == '-') || (v[t] == '^'))
{
push(v[t], 2);


}

else if (v[t] == ')')
{
int y = pop(2);
push(y, 1);

}

else
{
push(v[t], 1);

}
}
int k = 0;
char c;
while ((c = pop(1)) !='\0') //loop to put elements in the array v
{

if (c != '(')
{

v[k++] = c;

}
}
v[k--] = '\0';
int m;
for (m=0; m != k; m++, k--) //for reversing the string
{
char t = v[m];
v[m] = v[k];
v[k] = t;
}

a[i++] =v;
printf("%s",a[i - 1]);
}
int p;
for (p = 0; p <z ; p++) //printing the elements
printf("%s\n",*a[p]);
return 0;
}
char ac[400];
char as[400];
int ic = 0;
int is = 0;
void push(int c,int t)
{
if (t == 1 && ic != 400)
ac[ic++] = c;
else if (t == 2 && is != 400)
as[is++] = c;
}
char pop(int t)
{
if (t == 1 && ic != 0)
return ac[--ic];
if (t == 2 && is != 0)
return as[--is];
return '\0';
}

但它甚至没有正确输入,我无法弄清楚这段代码中有什么错误。请帮助找出问题所在。

最佳答案

after inputing the no of test cases i.e.int z and first line if input it crashes

这是由于

        printf("%s\n",*a[p]);

正如 BLUEPIXY 所注意到的,*a[p] 是一个 char;但是 %s 需要一个 char *,因此你需要

        printf("%s\n", a[p]);

关于v超出范围,关键因素不是范围(可见性),而是v的存储持续时间(lifetime) code> - 当与其关联的 block 的执行结束时,它的生命周期结束,并且指向它的指针 a[i] 的值变得不确定;通过改变

        a[i++] =v;

        a[i++] = strdup(v);

你可以补救。

关于c - 反向抛光转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com