字符串流数学运算
Posted
技术标签:
【中文标题】字符串流数学运算【英文标题】:Stringstream math operations 【发布时间】:2020-01-22 15:05:35 【问题描述】:假设我有一个包含字符串1+2
的字符串流。现在,如果我得到这个字符串流的 int 值,我得到1
作为结果。有没有办法得到3
的预期结果?
【问题讨论】:
为什么预期的输出应该是 3?这是一个扫描和解析问题 @RoQuOTriX 好吧,我已经写了 1+2,所以如果有办法自动计算这个就好了... 你有ABC+XYZ
会一直这样吗?
是的,您有一个包含三个字符“1+2”的字符串。字符串不是计算项。我想,如果你搜索“解析数学字符串”,你会发现一些东西
@scohe001 你是什么意思?
【参考方案1】:
不使用标准 C++ 库。表达式解析不是标准 C++ 的一部分。你必须自己写。
【讨论】:
【参考方案2】:当然,您可以创建自己的 result
类型,然后使用自定义提取运算符以您希望的方式从字符串流中读取:
struct result
double val;
bool err;
std::string err_val;
;
std::istringstream& operator>>(std::istringstream &iss, result &r)
double lhs, rhs;
char op;
//Should probably add some check to make sure this read happens okay...
iss >> lhs >> op >> rhs;
if (op == '+')
r.val = lhs + rhs;
r.err = false;
else
r.err = true;
r.err_val = "I can only handle addition!";
return iss;
int main()
std::istringstream iss("1+2");
result res;
iss >> res;
std::cout << "Result is: " << res.val << std::endl;
return 0;
在这里运行:https://ideone.com/LKAlag
【讨论】:
以上是关于字符串流数学运算的主要内容,如果未能解决你的问题,请参考以下文章