linux使用C++做到类似mysql的命令行表格输出(处理中英文在命令行对齐问题)

本文介绍如何在Linux环境下使用C++创建一个类似MySQL命令行的表格输出工具,解决中英文对齐问题。作者遇到的问题是,当输出包含中文字符时,由于UTF8编码和屏幕宽度差异导致对齐不正确。通过对setw()函数工作原理的理解,作者提出了一个解决方案,实现了对中英文字符的兼容,使得表格输出能够正确对齐。
摘要由CSDN通过智能技术生成

最近工作需要,需要写一个查询工具,查询结果是一个表的结果,使用文本输出看起来比较混乱,就想着能否做成类似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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值