void rpn(char*text)
{static int j=0;
char st[10];
char str[80]="";
int i;
int n=strlen(text);
for(i=0;i<n;i++)
{printf("enter\n");
if(text[i]=="(")
{
continue;
}
else if(text[i]=='+'||text[i]=='*'||text[i]=='-'||text[i]=='/'||text[i]=='^')
{
st[j]=text[i];
printf("%c\n",st[j]);
j++;
}
else if(text[i]==')')
{
strcat(str,st[j]);
printf("%c\n",str);
j--;
}
else
{
printf("yay\n");
strcat(str,text[i]);
//strcat(str,'\0');
printf("%c\n",str);
}
}
if(st[j]!="null")
{int k;
for(k=j;k>=0;k--)
{
strcat(str,st[j]);
}
}
}
int main()
{
printf("find ex\n");
char texts[]="((a+t)*((b+(a+c))^(c+d)))";
rpn(texts);
return 0;
}
输出:
找到前
输入
耶
分段故障
它打印yay,但是当它必须从text [i]复制字母“ a”到str时,它显示分段错误。
我不明白为什么我尝试了所有分配了额外空间的东西,但似乎什么也没用。
答案 0 :(得分:3)
您的代码中有几个问题
static int j = 0;
为什么 j 是静态的,同时又用作 st 中的索引,而不是静态
if(text [i] ==“(”)
无效,您将字符与字符串进行比较,行为未定义
strcat(str,st [j]);
无效,第二个参数是字符而不是字符串
printf(“%c \ n”,str);
无效,格式等待 int (作为打印字符的代码),但参数为字符串
strcat(str,text [i]);
无效,第二个参数是字符而不是字符串
if(st [j]!=“ null”)
无效,您比较字符和字符串,行为未定义
strcat(str,st [j]);
无效,第二个参数是字符而不是字符串
请注意,在先前的问题中,还有一种保护措施,可以避免通过无效索引(对于两个数组太大,或者对于 st 为负)读取/写入数组。表情太糊糊了')')
st 可能必须是char*
的数组,而不是 char 的数组(更改其类型不足以使代码正确)< / p>
似乎您想解析表达式,但是您期望得到什么结果?