对含有理数的字符串表达式进行运算,支持不含括号的加减法
#支持分子和分母仅为一位数的有理数
cout << "输入一个字符串表达式" << endl;
string str;
cin >> str;
int num = str.length();
Rational *rationals=new Rational[num];
char *operators=new char[num];
int rationalNum= 0;
int operatorNum = 0;
for (int i = 0; i < num; i++)
{
if (str[i] == '+' || str[i] == '-')
{
operators[operatorNum] = str[i];
operatorNum++;
}
else if (str[i] == '/')
{
int num = str[i - 1]-48;
int den = str[i + 1]-48;
rationals[rationalNum] = Rational(num,den);
rationalNum++;
}
}
for (int i = 0; i < operatorNum; i++)
{
if (operators[i] == '+')
{
rationals[i+1] = rationals[i] + rationals[i + 1];
}
else if (operators[i] == '-')
{
rationals[i+1] = rationals[i] - rationals[i + 1];
}
}
rationals[rationalNum-1].print();
#更广泛的
cout << "输入一个字符串表达式" << endl;
string str;
cin >> str;
//加减法器
int num = str.length();
//提取运算符
char *operators = new char[num];
int operatorNum = 0;//运算符个数
for (int i = 0; i < num; i++)
{
if (str[i] == '+' || str[i] == '-')
{
operators[operatorNum] = str[i];
operatorNum++;
}
}
//提取字符串中的数字
int numberNum = (operatorNum + 1) * 2;//分子和分母个数的总和
int *number = new int[numberNum];
for (int i = 0; i < numberNum; i++)
number[i] = 0;
int j = 0;
for (int i = 0; i < num; i++)
{
if (str[i] >= '0'&&str[i] <= '9')
{
number[j] *= 10;
number[j] = number[j] + str[i] - '0';
}
else if (str[i] == '-' || str[i] == '+' || str[i] == '/')
j++;
}
//创建Rational对象
Rational *rationals = new Rational[numberNum / 2];
int rationalNum = 0;
for (int i = 0; i < numberNum; i += 2)
{
rationals[rationalNum] = Rational(number[i], number[i + 1]);
rationalNum++;
}
//执行运算
for (int i = 0; i < operatorNum; i++)
{
if (operators[i] == '+')
{
rationals[i + 1] = rationals[i] + rationals[i + 1];
}
else if (operators[i] == '-')
{
rationals[i + 1] = rationals[i] - rationals[i + 1];
}
}
rationals[rationalNum - 1].print();