工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
楼主: Freedomer

i不用赋值也可以用吗?

[复制链接]
发表于 2007-5-24 03:31 | 显示全部楼层
用另外一个指针char*pp = p
然后*pp++=*e吧..
这下可以return p了.....
回复

使用道具 举报

 楼主| 发表于 2007-5-24 21:32 | 显示全部楼层
下面是正确的代码,参考答案之一,比较长,中间部分可以不用理会,我不明白的只是它的i不用赋初值,(是不是自动默认为0?这个值得考究..第一次见..当我改为int i=0的时候是正确的,而赋其他值就不能返回任何东西)还有有关将*e赋值给p的语句,就像我前面所说,改为*p++=*e++,也是什么都返回不了....

char *RPExpression(char *e)
/* 返回表达式e的逆波兰式 */
{ int i;
char  *p,c;
p=(char*)malloc(strlen(e)*sizeof(char));
Stack s;
InitStack(s);
for(;*e!='\0';e++)
{ if((*e!='+')&&(*e!='-')&&(*e!='*')&&(*e!='/')&&(*e!='(')&&(*e!=')'))
    {*(p+i)=*e;
      i++;
     }
else
{switch(*e)
{case'(':Push(s,*e);break;
case')':while(Top(s)!='(')
{Pop(s,c);
*(p+i)=c;
i++;
  }
    Pop(s,c);break;
   case'+':
  case'-':while(!(StackEmpty(s))&&!(Top(s)=='('))
  {Pop(s,c);
    *(p+i)=c;
     i++;
          }
  Push(s,*e);break;
    case'*':
  case'/':if((Top(s)=='*'||Top(s)=='/'))
  {Pop(s,c);
    *(p+i)=c;
    i++;
  Push(s,*e);
   }
     else
   Push(s,*e);break;
         }
      }
    }
  while(!(StackEmpty(s)))
  {Pop(s,c);
   *(p+i)=c;
   i++;
   }
*(p+i)='\0';
return p;
}
回复

使用道具 举报

发表于 2007-5-24 22:45 | 显示全部楼层
作业系统环境下,int 变量会自动初始化为0,(看堆那个窗口可以知道)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 09:47

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表