如何在C++中打印复数

How to print complex numbers in C++

本文关键字:打印 C++      更新时间:2023-10-16

我在玩C++的课程。目前,我正在研究一个复数类,并希望能够以以下格式打印它们:-2+3i1-4i。这意味着,我希望实部只有一个符号,如果它是负数。相反,虚部应该总是有一个符号,无论它是正数还是负数。

我尝试了以下方法,但没有按预期工作:

inline void Complex::print() const {
std::cout << x;
std::cout << std::showpos << y << "i" << std::endl;
}

此方法还为实部打印符号(如果它是正数(。为什么std::showpos会影响第一行?

有没有更好的方法可以做到这一点?

showpos

是"粘性的",并应用于每个后续数字,直到它被noshowpos更改回来。

您可以将showpos与本地流一起使用,以避免弄乱std::cout

inline void Complex::print() const {
std::ostringstream y_stream;
y_stream << showpos << y;
std::cout << x 
<< y_stream.str() << 'i'
<< std::endl;
}

设置 showpos 格式标志时,在插入到流中的每个非负数值(包括零(之前都会有一个加号 (+(。可以使用noshowpos操纵器取消设置此标志。

代码中的细微更改:

inline void Complex::print() const {
std::cout << std::noshowpos << x;
std::cout << std::showpos << y << "i" << std::endl;
}

这是因为std::showpos标志会影响插入到流中的每个数字。(http://www.cplusplus.com/reference/ios/showpos/(

您是否尝试过使用if语句?

if (x > 0)
{
std::cout << "+";
}

如果您从不使用std::noshowposstd::cout将保留showpos标志,以便下次您调用print()时会影响x(以及您在程序中用std::cout打印的任何其他号码(。

因此,要么在打印后直接使用std::noshowposy

std::cout << std::showpos << y << std::noshowpos << "i" << std::endl;

或直接在打印x之前:

std::cout << std::noshowpos << x;