思路:用一个栈保存数字,从左往右扫描字符串,遇到数字就存进入栈中,遇到运算符就从栈中取两个数字进行运算。
#include "stdafx.h"
#include<cstdlib>
#include<iostream>
#include<stack>
#include <string>
using namespace std;
int operator1(const char str[]);
int tran(char ch);
int main()
{
//printf("fdafda");
//string str = "2422*+13*-^*5-";
const char c[]= "32422*+13*-^*5-";
int result = operator1(c);
std::cout << result << endl;
return 0;
}
int operator1(const char str[])
{
stack<int> strStack;
int i = 0;
char ch = str[0];
while (ch!='\0')
{
if (ch >= '0'&&ch <= '9' )
{
ch = tran(ch);
strStack.push(ch);
}
else
{
int c2 = strStack.top();
strStack.pop();
int c1 = strStack.top();
strStack.pop();
int c3 = 0;
switch (ch)
{
case '+': c3 = c1 + c2; break;
case '-': c3 = c1 - c2; break;
case '*': c3 = c1 * c2; break;
case '/': c3 = c1 / c2; break;
case '%': c3 = c1 % c2; break;
case '^': c3 = pow(c1, c2); break;
}
strStack.push(c3);
}
i++;
ch = str[i];
int s = strStack.top();
}
return strStack.top();
}
int tran(char ch)
{
int num;
num = ch - '0';
return num;;
}