#include <stdio.h>
#include<stdlib.h>
#include<string>
#include<iostream>
#include <vector>
#include <ctype.h>
using namespace std;
vector<float>Double;
vector<string>Char;
float ivalue(const char str[], int len, int &j)
{
int i = 0;
char moto[10];
while (isdigit(str[j]) || str[j] == '.')
{
#include<stdlib.h>
#include<string>
#include<iostream>
#include <vector>
#include <ctype.h>
using namespace std;
vector<float>Double;
vector<string>Char;
float ivalue(const char str[], int len, int &j)
{
int i = 0;
char moto[10];
while (isdigit(str[j]) || str[j] == '.')
{
moto[i] = str[j];
i++; j++;
}
moto[i] = 0;
return atof(moto);
}
int isStack(string str)
{
for (int i = 0; i < Char.size(); i++)
{
if (str == Char[i])return i;
}
return -1;
i++; j++;
}
moto[i] = 0;
return atof(moto);
}
int isStack(string str)
{
for (int i = 0; i < Char.size(); i++)
{
if (str == Char[i])return i;
}
return -1;
}
float STR(const char str[], int len, int &j)
{
string add;
while (1)
{
add.clear();
while (isalpha(str[j]))
{
float STR(const char str[], int len, int &j)
{
string add;
while (1)
{
add.clear();
while (isalpha(str[j]))
{
add += str[j];
j++;
}
if (str[j] == ' ')j++;
if (add == "int" || add == "double")
{
if (isalpha(str[j]))
{
add.clear();
while (isalpha(str[j]))
{
j++;
}
if (str[j] == ' ')j++;
if (add == "int" || add == "double")
{
if (isalpha(str[j]))
{
add.clear();
while (isalpha(str[j]))
{
add += str[j];
j++;
}
Char.push_back(add);
j++;
}
Double.push_back(ivalue(str, len, j));
if (j == len - 1 && str[j] == ';')return-1;
else if (str[j] == ';') j++;
}
else if (isStack(add) != -1)
{
return isStack(add);
j++;
}
Char.push_back(add);
j++;
}
Double.push_back(ivalue(str, len, j));
if (j == len - 1 && str[j] == ';')return-1;
else if (str[j] == ';') j++;
}
else if (isStack(add) != -1)
{
return isStack(add);
}
else
{
return -1;
}
}
else
{
return -1;
}
}
}
char Precede(char a, char b)
{
char Precede(char a, char b)
{
if ((a == '+' || a == '-') && (b == '*' || b == '%' || b == '/'))return '<';
else if ((a == '+' || a == '-') && (b == '+' || b == '-'))return '>';
if (a == '('&&b == ')') { return '='; }
else if (a == '(') { return '<'; }
else if (b == ')') { return '>'; }
if (b == '(') { return '<'; }
if ((a == '*' || a == '%' || a == '/') && (b != '('))return '>';
else if ((a == '+' || a == '-') && (b == '+' || b == '-'))return '>';
if (a == '('&&b == ')') { return '='; }
else if (a == '(') { return '<'; }
else if (b == ')') { return '>'; }
if (b == '(') { return '<'; }
if ((a == '*' || a == '%' || a == '/') && (b != '('))return '>';
}
float opreator(float number1, char a, float number2)
{
switch (a)
{
case '+': return number1 + number2;
float opreator(float number1, char a, float number2)
{
switch (a)
{
case '+': return number1 + number2;
case '-': return number1 - number2;
case '*': return number1 * number2;
case '/': return int(number1) / int(number2);
case '%': return int(number1) % int(number2);
}
}
}
float change(const char str[], int len)
{
vector<float> OPND; //默认初始化,vec1为空
vector<char>OPTR;
int i = 0;
char a;
int temp;
float number1, number2;
while (1)
{
if (isdigit(str[i])) { OPND.push_back(ivalue(str, len, i)); continue; }
else if (isalpha(str[i]))
{
temp = STR(str, len, i);
if (temp != -1)OPND.push_back(Double.at(temp));
else {
cout << "this is no find";
return 0;
}
continue;
}
float change(const char str[], int len)
{
vector<float> OPND; //默认初始化,vec1为空
vector<char>OPTR;
int i = 0;
char a;
int temp;
float number1, number2;
while (1)
{
if (isdigit(str[i])) { OPND.push_back(ivalue(str, len, i)); continue; }
else if (isalpha(str[i]))
{
temp = STR(str, len, i);
if (temp != -1)OPND.push_back(Double.at(temp));
else {
cout << "this is no find";
return 0;
}
continue;
}
if (OPTR.size() == 0 && (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/' || str[i] == '%'))
{ OPTR.push_back('('); OPTR.push_back(str[i]); i++; continue; }
{ OPTR.push_back('('); OPTR.push_back(str[i]); i++; continue; }
else if (OPTR.size() == 0) { OPTR.push_back('('); continue; }
if (str[i] == 0)
{
switch (Precede(OPTR.back(), ')'))
{
case '>':
number2 = OPND.back();
OPND.pop_back();
number1 = OPND.back();
OPND.pop_back();
a = OPTR.back();
OPTR.pop_back();
OPND.push_back(opreator(number1, a, number2));
break;
case '=':
OPTR.pop_back();
break;
if (str[i] == 0)
{
switch (Precede(OPTR.back(), ')'))
{
case '>':
number2 = OPND.back();
OPND.pop_back();
number1 = OPND.back();
OPND.pop_back();
a = OPTR.back();
OPTR.pop_back();
OPND.push_back(opreator(number1, a, number2));
break;
case '=':
OPTR.pop_back();
break;
}
}
else {
switch (Precede(OPTR.back(), str[i]))
{
case '<':
{
if (i <= len) {
OPTR.push_back(str[i]);
i++;
}
break;
}
case '>':
number1 = OPND.back();
OPND.pop_back();
number2 = OPND.back();
OPND.pop_back();
a = OPTR.back();
OPTR.pop_back();
OPND.push_back(opreator(number2, a, number1));
break;
case '=':
OPTR.pop_back();
i++;
break;
}
else {
switch (Precede(OPTR.back(), str[i]))
{
case '<':
{
if (i <= len) {
OPTR.push_back(str[i]);
i++;
}
break;
}
case '>':
number1 = OPND.back();
OPND.pop_back();
number2 = OPND.back();
OPND.pop_back();
a = OPTR.back();
OPTR.pop_back();
OPND.push_back(opreator(number2, a, number1));
break;
case '=':
OPTR.pop_back();
i++;
break;
}
}
if (str[i] == 0 && OPND.size() == 1 && OPTR.size() == 0)break;
}
number1 = OPND.front();
OPND.~vector();
OPTR.~vector();
return number1;
}
number1 = OPND.front();
OPND.~vector();
OPTR.~vector();
return number1;
}
此函数封装好,返回出结果值