最近工作需要,需要写一个查询工具,查询结果是一个表的结果,使用文本输出看起来比较混乱,就想着能否做成类似mysql的输出控制。
github找到一个可以现成来使用的工具。地址为:https://github.com/haarcuba/cpp-text-table
不过这个方案有个问题,就是当输出结果全部为英文或者数字的时候,可以正常工作。当输出结果含有中文的时候,则会出现问题。
问题如下:
1、使用string存储,一个中文字符,在linux下,它使用UTF8编码时,是3个字节大小。
2、一个中文字符,它占的屏幕宽度是普通英文或数字的2倍。
3、使用setw(n)这样来对齐的时候,比如说你想按4个英文字符的宽度来对齐,输出了一个中文的时候。那如果使用
string str = "系统";
string str1 = "元";
string str2 = "abcd";
cout << "|" << std::setw(4) << setiosflags(ios::right) << setfill('*') << str << "|" << endl;
cout << "|" << std::setw(4) << setiosflags(ios::right) << setfill('*') << str1 << "|" << endl;
cout << "|" << std::setw(4) << setiosflags(ios::right) << setfill('*') << str2 << "|" << endl;
执行结果如下所示:
我们看到,第二行的元&#x