工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1690|回复: 8

谁能帮我看一下下面的代码?不知道有没错?

[复制链接]
发表于 2007-6-10 01:20 | 显示全部楼层 |阅读模式
#include "stdafx.h"
#include "yunsuan.h"
#include "Evaluate.h"
#include <stdlib.h>
#include <string>
#include <stack>
using namespace std;

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define TRUE 1
#define FALSE 0
#define ERROR 0
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Evaluate::Evaluate()
{
}
Evaluate::~Evaluate()
{
}
int Evaluate::Precede(char m,char n)
{
char f;
switch(n)
{
case'+':
case'-':
  if(m=='('||m=='=')
   f='<';
  else
   f='>';
  break;
case'*':
case'/':
  if(m=='*'||m=='/'||m==')')
   f='>';
  else
   f='<';
  break;
case')':switch(m)
   {
    case'(':
     f='=';
     break;
    case'=':
     return ERROR;
    default:
     f='>';
   }
  break;
case'=':switch(m)
   {
    case'=':
     f='=';
     break;
    case'(':
     return ERROR;
    default:
     f='>';
   }
}
return f;
}
int Evaluate::In(char c)
{
switch(c)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'=':return TRUE;
default:return FALSE;
}
}
int Evaluate::Operate(int a,char t,int b)
{
int s;
switch(t)
{
case'+':
  s=a+b;
  break;
case'-':
  s=a-b;
  break;
case'*':
  s=a*b;
  break;
case'/':
  if(b=0)
   return ERROR;
  else
   s=a/b;
}
return s;
}
int Evaluate::EvaluateExpression()
{
stack<char>EXP;
stack<int>NUM;
char x;
    char c;
char t;
int a,b,k;
CString s;
int i=1;
EXP.push('#');
x=EXP.top();
c=s.GetAt(i);
while(c!='#'||x!='#')
{
  if(In(c))
   switch(Precede(x,c))
  {
   case'<':
    EXP.push(c);
    i++;
    c=s.GetAt(i);
    break;
   case'=':
    x=EXP.top();
    EXP.pop();
    i++;
    c=s.GetAt(i);
    break;
   case'>':
    t=EXP.top();
    EXP.pop();
    b=NUM.top();
    NUM.pop();
    a=NUM.top();
    NUM.pop();
    NUM.push(Operate(a,t,b));
    i++;
    s.GetAt(i);
    break;
  }
  else if(c>='0'&&c<='9')
  {
   s.Format(c);
   NUM.push(c);
   i++;
   c=s.GetAt(i);
  }
        else
  {
      return ERROR;
  }
  x=EXP.top();
}
k=NUM.top();
return k;
}
 楼主| 发表于 2007-6-10 01:21 | 显示全部楼层
特别是最后的红色部分,能不能得出一个简单的表达式结果呢?其中那中间数字只有0~9
回复

使用道具 举报

发表于 2007-6-10 07:17 | 显示全部楼层
编译运行一下再把错误发上来吧……
回复

使用道具 举报

 楼主| 发表于 2007-6-10 09:32 | 显示全部楼层
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded symbols for 'C:\WINDOWS\system32\MFC42D.DLL'
Loaded symbols for 'C:\WINDOWS\system32\MSVCRTD.DLL'
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded symbols for 'C:\WINDOWS\system32\MFCO42D.DLL'
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42loc.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\uxtheme.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTF.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTFIME.IME', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
The thread 0xEB4 has exited with code 2 (0x2).
The program 'C:\Documents and Settings\Administrator\桌面\yunsuan\Debug\yunsuan.exe' has exited with code 2 (0x2).
编译成功,没错误!可不知道会不会有逻辑上的错误,因为搞界面的时候总不成功!
回复

使用道具 举报

 楼主| 发表于 2007-6-10 09:37 | 显示全部楼层
->00000000   ???
00000001   ???
00000002   ???
00000003   ???
00000004   ???
00000005   ???
00000006   ???
00000007   ???
00000008   ???
00000009   ???
0000000A   ???
0000000B   ???
0000000C   ???
0000000D   ???
0000000E   ???
0000000F   ???
00000010   ???
00000011   ???
00000012   ???
00000013   ???
00000014   ???
00000015   ???
00000016   ???
回复

使用道具 举报

 楼主| 发表于 2007-6-10 09:41 | 显示全部楼层
感觉这里将字符c转化为整型有问题!其中s为CString
s.Format(c)
回复

使用道具 举报

发表于 2007-6-10 09:49 | 显示全部楼层
你给的代码我们无法帮你测试……
回复

使用道具 举报

 楼主| 发表于 2007-6-10 10:01 | 显示全部楼层
我把原代码压缩发到你的邮箱的了,如果有空请帮我看看好吗?
回复

使用道具 举报

发表于 2007-6-15 19:34 | 显示全部楼层
代码太长,格式又乱。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-30 21:19

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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