测试用例之间的不同打印格式



所以我有两个测试用例,一个显示正确,另一个显示不正确。我需要将不正确的一个与正确的匹配。如下所实现的打印功能。我相信逻辑有点错。但是我不知道该怎么办。我需要您的帮助。谢谢。

正确打印:

********** TestSubscript1 **********
Construct from unsigned char array:
2  4  6  6  8  10  6  12  234  14  16  6  6  (size=13, capacity=16)
using subscript: a[6]
a[6] = 6

不正确的打印:

********** TestSubscript1 **********
Construct from unsigned char array:
2  4  6  6  8  10 6  12 23414 16 6  6  (size=13, capacity=16)
using subscript: a[6]
a[6] = 6

打印功能:

void Print(const vector<unsigned char>& s)
{
    for(int i = 0; i < s.count; i++) 
    {
        std::cout<<std::setw(3)<<std::left<<(unsigned)s.v[i]; 
    }
std::cout<<std::setw(2)<< "(size=" << s.count << ", " << "capacity=" << 
s.capacity << ")";
std::cout<<std::endl; 
}

不设置数字的宽度,只在数字之后放两个空格:

std::cout << static_cast<unsigned int>(s.v[i]) << "  ";

,然后:

std::cout<< "(size=" << s.count << ", " << "capacity=" << s.capacity << ")";

"正确"输出并不局限于仅将std::setw(3)用于所有数字,就像您在输出中所做的那样。您想要的输出可以使用1位数字的std::setw(3),2位数字的std::setw(4)和3位数字的std::setw(5)获得,然后在最后省略std::setw(2)

int getw(unsigned char ch)
{
    if (ch < 10) return 1;
    if (ch < 100) return 2;
    return 3;
) 
void Print(const vector<unsigned char>& s)
{
    for(int i = 0; i < s.count; ++i)
    {
        unsigned char ch = s.v[i];
        std::cout << std::setw(2+getw(ch)) << std::left << (unsigned)ch;
    }
    std::cout << "(size=" << s.count << ", " << "capacity=" << s.capacity << ")";
    std::cout << std::endl;
}

实现相同输出的一种简单方法是完全不使用std::setwstd::left。只需在每个数字之后写下数字,然后写2个空间:

void Print(const vector<unsigned char>& s)
{
    for(int i = 0; i < s.count; ++i)
    {
        unsigned char ch = ;
        std::cout << (unsigned)s.v[i] << "  ";
    }
    std::cout << "(size=" << s.count << ", " << "capacity=" << s.capacity << ")";
    std::cout << std::endl;
}

最新更新