如何在 C++ 中打印上标 3

How to print superscript 3 in C++

我正在寻找一种打印上标 3 的方法,我在谷歌上搜索了很多,然后找到了一种打印上标 2:

的方法
const char expo_square = 253;

void main () {
    std::cout << expo_square;
    return;
}

经过更多谷歌搜索,我发现上标 3Alt Keycode,即:

Alt + 0179

这个问题是在编译 C++ 源文件时:

const char expo_cube = 0179;

void main () {
    std::cout << expo_cube;
    return;
}

我收到一个错误:
3d.cpp(18): error C2041: illegal digit '9' for base '8'
(不要介意文件名)

所以我尝试了下一个合乎逻辑的事情,因为上标 2Alt Keycode253,我尝试了 Alt Keycode 254,但我最终得到的是:

所以我想问一下:
How can I print superscript 3 in C++?

如果用 0 作为表达式的前缀,编译器认为该值以 八进制基数 表示。八进制数必须在 [0,7] 范围内。 0179 表达式中的值 9 超出了 octal radix 范围。

尝试以下解决方案来打印上标 3:

std::cout << "x\u00b3" << std::endl;

结果:x3


参考资料
  • How to print subscripts/superscripts on the screen in C++?

Unicode 上标 3,或 ³ 在 utf-16 中是 \u00b3,在 UTF-8 中是 \xc2\xb3

因此,这适用于 cout,假设您的控制台是 UTF8。

#include <iostream>

int main()
{
    std::cout << "\xc2\xb3" << std::endl;
    return 0;
}

要将您的控制台设置为 UTF-8 模式,您可以通过多种方式进行,如果需要,每种方式都是 OS 相关的。在 Windows 上,您可以在调用代码之前从命令提示符 运行 chcp 65001

如果您几乎看不出上面打印的 ³,让我们放大一点:

或者,您可以通过 Windows API、SetConsoleOutputCP

在代码中执行此操作
SetConsoleOutputCP(65001);

因此,这在 Windows 程序中同样有效,无需在 运行 启动程序之前更改任何环境。

#include <windows.h>
#include <iostream>
int main()
{
    SetConsoleOutputCP(65001);
    std::cout << "\xc2\xb3" << std::endl;
    return 0;
}

扩展问答范围此函数可用于获取任何幂的上标(可能对某些人有用):

std::string supow(int pow)
{
    std::string r{}, t{};
    if (pow<0) { r="\u207b"; pow*=-1; } else r.clear();
    t=itoa(pow); //stringize the pow for easier access to digits
    for (auto c:t)
    {
        switch(c-48)
        {
            case 0: r+="\u2070"; break;
            case 1: r+="\u00b9"; break;
            case 2: r+="\u00b2"; break;
            case 3: r+="\u00b3"; break;
            case 4: r+="\u2074"; break;
            case 5: r+="\u2075"; break;
            case 6: r+="\u2076"; break;
            case 7: r+="\u2077"; break;
            case 8: r+="\u2078"; break;
            case 9: r+="\u2079"; break;
        }
    }
    return r;
}