九月鹰飞 发表于 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

iptton 发表于 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)

iptton 发表于 2007-6-10 09:49

你给的代码我们无法帮你测试……

九月鹰飞 发表于 2007-6-10 10:01

我把原代码压缩发到你的邮箱的了,如果有空请帮我看看好吗?

用程序诠释生命 发表于 2007-6-15 19:34

代码太长,格式又乱。
页: [1]
查看完整版本: 谁能帮我看一下下面的代码?不知道有没错?