有没有统一的方法来对齐 C++ 中的控制台输出

Kul*_*ulo 5 c++ printf wstring

我满足了在控制台中对齐输出文本的要求。输出文本存储为std::wstring并编码为UTF-8. 使此任务变得棘手的是,输出文本同时包含 ASCII 字符和日语字符,例如\xe3\x83\x8a5\xe5\x9b\x9e1\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb34a\xe3\x82\xb9F。由于ASCII字符和日文字符的宽度不同,使用setw()或直接无法对齐。\n例如,wprintf(L"%-10s")

\n
#include <iostream>\n#include <iomanip>\nusing namespace std;\nint main(){\n    std::locale::global(std::locale(""));\n    wstring s[] = {L"\xe7\x9f\xad3\xe3\x83\x9e231\xe3\x83\xbc\xe2\x97\x8b",L"\xe3\x81\xae\xe3\x81\x8d3\xe3\x83\xbc\xe3\x83\x8a",L"\xe3\x81\x90\xe3\x83\x9e",L"\xe3\x82\x8d\xe3\x81\xab\xe3\x83\x88"};\n    for(int i=0;i<4;i++)    wcout << setw(10) << s[i] <<123<< endl;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

会像:

\n
    \xe7\x9f\xad3\xe3\x83\x9e231\xe3\x83\xbc\xe2\x97\x8b123\n     \xe3\x81\xae\xe3\x81\x8d3\xe3\x83\xbc\xe3\x83\x8a123\n       \xe3\x81\x90\xe3\x83\x9e123\n      \xe3\x82\x8d\xe3\x81\xab\xe3\x83\x88123\n
Run Code Online (Sandbox Code Playgroud)\n

但如果文本仅包含 ASCII 字符,则它可以正常工作。

\n

我知道我可以自己编写一个新函数来对齐它,但我想知道是否已经有一个可靠的解决方案。

\n