You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何格式化存储不同长度字符串的2D数组,使其打印呈现规整正方形效果

问题原因

输出变形是因为二维数组中不同元素的字符长度不一致,比如p1占2字符、100占3字符、制表符占1字符,输出时没有统一每列宽度,导致列错位。


解决方案

统一设置每列的输出宽度,同时调整边框横线的长度匹配列宽,输出时用格式化控制固定每个元素的占宽即可。以下是可直接运行的修改后代码:

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

// 通用方法:先计算数组中所有元素的最大长度,动态确定列宽
int getMaxWidth(string a[4][4]) {
    int max_w = 0;
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 4; j++) {
            if(a[i][j].size() > max_w) max_w = a[i][j].size();
        }
    }
    return max_w;
}

void printSquare(string a[4][4], int col_width) {
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 4; j++) {
            // 固定宽度左对齐输出,不足部分自动补空格
            cout << left << setw(col_width) << a[i][j];
        }
        cout << endl;
    }
}

int main() {
    string a[4][4]= {{"\xC9", "\xCD", "\xCD", "\xBB"},
                    {"\xBA", "p1", "p2", "\xBA"},
                    {"\xBA", "100", "p3", "\xBA"},
                    {"\xC8", "\xCD", "\xCD", "\xBC"}};
    int COL_WIDTH = getMaxWidth(a);
    // 调整边框横线长度匹配列宽
    string h_line(COL_WIDTH, '\xCD');
    a[0][1] = a[0][2] = a[3][1] = a[3][2] = h_line;
    printSquare(a, COL_WIDTH);
    return 0;
}

小提示:如果你使用的终端是UTF-8编码,原本的扩展ASCII制表符可能显示乱码,可以把\xC9这类符号替换成UTF-8制表符:┌代替\xC9、─代替\xCD、┐代替\xBB、│代替\xBA、└代替\xC8、┘代替\xBC,兼容性更好。


内容的提问来源于stack exchange,提问作者Parth Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:06:07