????2??????????C++??д???

#include
#include
#include
using namespace std;

// ???????????????????????????????
// ???????????????鶨??????????????????棬?????
char Precede_Matrix[7][7] =
{
 {'>'?? '>'?? '<'?? '<'?? '<'?? '>'?? '>'??}??
 {'>'?? '>'?? '<'?? '<'?? '<'?? '>'?? '>'??}??
 {'>'?? '>'?? '>'?? '>'?? '<'?? '>'?? '>'??}??
 {'>'?? '>'?? '>'?? '>'?? '<'?? '>'?? '>'??}??
 {'<'?? '<'?? '<'?? '<'?? '<'?? '='?? '0'??}??
 {'>'?? '>'?? '>'?? '>'?? '0'?? '>'?? '>'??}??
 {'<'?? '<'?? '<'?? '<'?? '<'?? '0'?? '='??}
};

namespace ConsoleApplicationCal
{
 class Program
 {
  // д??????????????????main?????д???Program?????
  // ???????Main()???????C#?????й???
 public: Program::Program(void)
   {
    Main();
   }

 public: static char Precede(char a?? char b)
   {
    int i = 0;
    int j = 0;
    switch (a)
    {
    case '+': i = 0; break;
    case '-': i = 1; break;
    case '*': i = 2; break;
    case '/': i = 3; break;
    case '(': i = 4; break;
    case ')': i = 5; break;
    case '#': i = 6; break;
    default: break;
    }
    switch (b)
    {
    case '+': j = 0; break;
    case '-': j = 1; break;
    case '*': j = 2; break;
    case '/': j = 3; break;
    case '(': j = 4; break;
    case ')': j = 5; break;
    case '#': j = 6; break;
    default: break;
    }

    return (Precede_Matrix[i][j]);
   }

 public: static double Operate(double a?? char oper?? double b)
   {
    switch (oper)
    {
    case '+': return a + b;
    case '-': return a - b;
    case '*': return a * b;
    case '/': return a / b;
    default: return -1;
    }
   }

 public: static bool IsOperand(char c)
   {
    if (('0' <= c && c <= '9') || c == '.') // c???????С????
     return true;
    else
     return false;
   }

 public: static void Main(void)
   {
    string str;
    while (cin >> str)
    {
     str += "#";      //  ????#???????????

     double a;
     double b;
     char x;
     char theta;

     stack OPTR;
     OPTR.push('#');
     stack OPND;

     int i = 0;
     char c = str[i++];
     double operand = 0;
     while (!(c == '#' && OPTR.top() == '#'))
     {
      if (IsOperand(c)) // c???????С????????????????????С???????????????????
      {
       int startIndex = i - 1;
       int length = 1; // c????????????????1
       while (IsOperand(str[i]))
       {
        i++;
        length++;
       }

       string doubleString = str.substr(startIndex?? length);
       //     operand = atof(&str[i - 1]); // ???c????????????double
       char **endPtr = NULL; // ????????????strtod?????
       OPND.push(strtod(doubleString.c_str()?? endPtr));

       c = str[i++];
      }
      else                            // c is operator or delimiter
      {
       switch (Precede(OPTR.top()?? c))
       {

       case '<':
        OPTR.push(c);
        c = str[i++];
        break;

       case '=':
        x = OPTR.top();
        OPTR.pop();

        c = str[i++];
        break;

       case '>':
        theta = OPTR.top();
        OPTR.pop();

        b = OPND.top();
        OPND.pop();

        a = OPND.top();
        OPND.pop();

        OPND.push(Operate(a?? theta?? b));
        break;

       default:
        break;
       }
      }
     }
     //  OPTR???????????????????????“#”
     //  ??“#”=“#”???????????????
     cout << OPND.top() << endl;
    }
   }
 };
}

int main(int argc?? char **argv)
{
 // ????Winform?е?Main????new??????????Application.Run(new Form1());
 // ????????????
 delete(new ConsoleApplicationCal::Program);

 return 0;
}

??????????????????C++??????????????????????C#???????????????C#???????Main()?????е??????????н?????С?

?????????????C++????????????????????????????????????棬????????????????????????????????????????????????????о???????????????????????????????????г??????

??????????C#?е?????????????????