如何在 C++ 中打印上标 3
How to print superscript 3 in C++
我正在寻找一种打印上标 3
的方法,我在谷歌上搜索了很多,然后找到了一种打印上标 2
:
的方法
const char expo_square = 253;
void main () {
std::cout << expo_square;
return;
}
经过更多谷歌搜索,我发现上标 3
的 Alt 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'
(不要介意文件名)
所以我尝试了下一个合乎逻辑的事情,因为上标 2
的 Alt Keycode
是 253
,我尝试了 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;
}
我正在寻找一种打印上标 3
的方法,我在谷歌上搜索了很多,然后找到了一种打印上标 2
:
const char expo_square = 253;
void main () {
std::cout << expo_square;
return;
}
经过更多谷歌搜索,我发现上标 3
的 Alt 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'
(不要介意文件名)
所以我尝试了下一个合乎逻辑的事情,因为上标 2
的 Alt Keycode
是 253
,我尝试了 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;
}