Jsjjsnmsk 2024-02-21 22:19 采纳率: 66.7%
浏览 8

我的把string转化为double的stringtodouble函数为什么只能从string中剥出1位小数

1198:逆波兰表达式

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 22013 通过数: 13681
【题目描述】
逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。

【输入】
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。

【输出】
输出为一行,表达式的值。

可直接用printf("%f\n", v)输出表达式的值v。

【输入样例】

    • 11.0 12.0 + 24.0 35.0
      【输出样例】

1357.000000
可以过,但是我的代码中stringtodouble函数为什么只能从string中剥出1位小数
stringtodouble函数定义:

double stringtodouble(string x)
{
    int len=x.size();
    double t=0.00,fushu=1.00;
    if(x[0]=='-')
    {
        fushu=-1.00;
        for(int i=0;i<len-1;i++)
        {
            x[i]=x[i+1];
        }
        len--;
    }
    bool xiaoshu=false;
    double xiaoshuwei=10.00;
    for(int i=0;i<len;i++)
    {
        if(x[i]=='.')
        {
            xiaoshu=true;
            continue;
        }
        if(!xiaoshu)
        {
            t=t*10.00+x[i]-'0';+x[i]-'0';
        }
        else
        {
            t+=(x[i]-'0')/xiaoshuwei;
//            cout<<t<<endl;
            xiaoshuwei*=10;
        }
    }
    return t*fushu;
}

代码:

#include<bits/stdc++.h>
using namespace std;
double stringtodouble(string x)
{
    int len=x.size();
    double t=0.00,fushu=1.00;
    if(x[0]=='-')
    {
        fushu=-1.00;
        for(int i=0;i<len-1;i++)
        {
            x[i]=x[i+1];
        }
        len--;
    }
    bool xiaoshu=false;
    double xiaoshuwei=10.00;
    for(int i=0;i<len;i++)
    {
        if(x[i]=='.')
        {
            xiaoshu=true;
            continue;
        }
        if(!xiaoshu)
        {
            t=t*10.00+x[i]-'0';+x[i]-'0';
        }
        else
        {
            t+=(x[i]-'0')/xiaoshuwei;
//            cout<<t<<endl;
            xiaoshuwei*=10;
        }
    }
    return t*fushu;
}
double hs()
{
    string a;
    cin>>a;
    if(a=="+")
    {
        return hs()+hs();
    }
    if(a=="-")
    {
        return hs()-hs();
    }
    if(a=="*")
    {
        return hs()*hs();
    }
    if(a=="/")
    {
        return hs()/hs();
    }
    return stringtodouble(a);
}
int main() 
{
    cout<<fixed<<setprecision(6)<<hs();
}

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-02-21 23:15
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的问题描述,出现错误的是代码的第20行,错误提示为“无法进行赋值,因为左侧和右侧元素数目不同”。这通常发生在试图将不同长度的数组赋值给一个数组时。在你的代码中,这可能是因为 Pdif1_values 数组的长度与 v_range 数组的长度不一致导致的。

    解决这个问题的方法是确保 Pdif1_values 数组与 v_range 数组的长度相同。因为你打算对应每个 v 值计算一个 Pdif1 值,所以在初始化 Pdif1_values 数组时,应该使用与 v_range 数组相同长度的数组。

    以下是修改后的代码,将 Pdif1_values 数组的长度设为与 v_range 数组相同:

    % 初始化存储Pdif1的数组
    Pdif1_values = zeros(size(v_range));
    

    请将这行代码替换掉原来的:

    % 初始化存储Pdif1的数组
    Pdif1_values = zeros(1, 100);
    

    这样修改后,Pdif1_values 数组的长度就与 v_range 数组相匹配了,应该就可以解决赋值错误的问题。

    如果还有其他问题或者需要进一步帮助,请随时告诉我。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 2月21日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀