文章

10

粉丝

143

获赞

3

访问

54.8k

头像
字符串模拟
P1271 上海交通大学机试题
发布于2022年2月23日 16:17
阅读数 5.3k

思路:遍历输入的表达式字符串,对可能遇到的+、-、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;

...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发