c++中复数计算器怎么实现输入流能够识别两种不同的输入方式
时间: 2024-10-18 09:18:41 浏览: 31
在 C++ 中实现一个复数计算器,你可以使用 `std::istringstream`(输入流)来解析用户的输入,同时处理两种不同的输入方式:一种是以小括号包围实部和虚部,另一种可能是直接输入两个整数或浮点数,用空格分隔。这里我们先假设用户输入的形式为 `(a b)` 或者 `a b`,其中 `a` 和 `b` 分别代表实部和虚部。
以下是一个简单的示例代码:
```cpp
#include <iostream>
#include <sstream>
#include <complex>
std::string parse_input(const std::string& input) {
std::istringstream ss(input);
std::string part1, part2;
if (ss >> part1 >> part2 && (part1.back() == ' ' || part2.front() == '(')) { // 如果有空格或者小括号
return part1 + " " + part2; // 返回完整的字符串,用于解析
} else {
return input; // 直接返回原始输入,后续可能需要处理
}
}
std::complex<double> parse_complex(const std::string& input) {
auto str = parse_input(input);
double real, imag;
if (std::istringstream(str) >> real >> imag) {
return std::complex<double>(real, imag);
} else {
throw std::invalid_argument("Invalid complex number format"); // 输入格式错误
}
}
int main() {
std::string user_input;
std::cout << "Enter a complex number: ";
getline(std::cin, user_input);
try {
std::complex<double> c = parse_complex(user_input);
std::cout << "Parsed complex number: " << c << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
在这个代码中,`parse_input` 函数用于检查并提取有效的输入格式,然后 `parse_complex` 函数进一步解析成 `std::complex` 对象。如果用户输入的格式不符合要求,程序会抛出异常。
阅读全文