文章
10
粉丝
143
获赞
3
访问
54.8k
思路:遍历输入的表达式字符串,对可能遇到的+、-、x、=以及数字进行处理。
细节:使用side变量表示此时遍历的位置是在=左边还是右边。side初始为1
(1)若遇到的为=,则side=-1
(2)若遇到的为+或-,则continue,进入下一次循环
(3)若遇到的为x,则说明此时x的系数为1,进入深层判断:
(3.1)x后一项为'^',则说明是系数为1的二次项,再次判断x前面是否为'-'(为什么不判断+?因为会省略)
(3.2)若x后向=一项不为'^',则说明为一次项,同样判断x前面是否为'-'
(4)若遇到数字,则使用while循环与isdigit函数将整个数字提取到temp中,判断数字前是'+'还是'-' ,并判断该数字是常数项还是x前的系数
(4.1)若数字后一项为x,则:
(4.1.1)x后一项为'^',则说明是系数为1的二次项,则a+=temp
(4.1.2)若x后向=一项不为'^',则说明为一次项,则b+=temp
(4.2)若数字后一项不为x,则c+=temp
#include <iostream>
#include <cstdio>
#include <cmath>
#include <ctype.h>
using namespace std;
double a,b,c;//ax^2+bx+c=0
string str;
int side;//side表示该元素在=的左边还是右边
void operate(string str,double &a,double &b,double &c)
{
int n=str.size();
side=1;
for(int i=0;i<n;i++)
{
if(str[i]=='=') side=-1;//进入等号右边
else if(str[i]=='+'||str[i]=='-') continue;
...
登录后发布评论
暂无评论,来抢沙发