【问题标题】:How to calculate a string and store it in a variable? [duplicate]如何计算字符串并将其存储在变量中? [复制]
【发布时间】:2019-07-28 09:24:01
【问题描述】:

我正在编写一个 c++ 计算器,但我一直卡在将 std::string 更改为浮点变量以进行数学计算的部分。

我已经尝试过 atoi 并使用 'var'(单引号),但它似乎会导致不规则的大数字,并且代码的某些变体甚至无法编译,说“第 13 行第 18 列 C:\Users\ User\Desktop\calculator.cpp [错误] 在初始化时无法将 'std::string {aka std::basic_string}' 转换为 'float'。

#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>
#include <stdlib.h>

int main()
{
    std::cout << "Input arithmetic calculation: \n";
    std::string calc;
    std::cin >> calc;
    atoi( calc.c_str() );
    float result=calc;
    std::cout << "Result = ";
    std::cout << result << '\n';
}

我希望计算输出,例如 10*9=90 但它最终成为 10*9 或(当在 float result=calc 中添加单引号时) 1.93708e+009.

【问题讨论】:

  • 以上代码将无法编译。您不能将std::string 分配给float,如float result=calc;。您还丢弃了atoi() 的返回值。
  • atoi 不是您正在寻找的评估函数,它只是将数字字符串转换为整数。例如将"12" 转换为12
  • @kornkaobat This post 可以帮助你。
  • 好的,我找到了解决我的问题的 tinyexpr.h 头文件。

标签: c++ dev-c++


【解决方案1】:

[...] 我一直卡在将 std::string 更改为 float 变量以进行数学计算的部分。

因为:

  1. 您丢弃了atoi() 的值。用法如下所示:float result = atoi(calc.c_str());
  2. atoi() 没有做你认为的事情。它执行任何数学评估。它只是将可以表示为数字的文本转换为所述数字,即float x = atoi("5"); 将产生x == 5。您不能使用atoi() 并期望它执行数学计算。它只是转换。

您需要自己实现此行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2020-06-07
    • 2023-02-09
    相关资源
    最近更新 更多