Stringstream 数学运算
Stringstream math operations
假设我有一个包含字符串 1+2
的字符串流。现在,如果我得到这个字符串流的 int 值,我会得到 1
作为结果。有没有办法得到3
的预期结果?
未使用标准 C++ 库。表达式解析不是标准 C++ 的一部分。你必须自己写。
当然,您可以创建自己的 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
假设我有一个包含字符串 1+2
的字符串流。现在,如果我得到这个字符串流的 int 值,我会得到 1
作为结果。有没有办法得到3
的预期结果?
未使用标准 C++ 库。表达式解析不是标准 C++ 的一部分。你必须自己写。
当然,您可以创建自己的 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