所以我有两个测试用例,一个显示正确,另一个显示不正确。我需要将不正确的一个与正确的匹配。如下所实现的打印功能。我相信逻辑有点错。但是我不知道该怎么办。我需要您的帮助。谢谢。
正确打印:
********** 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::setw
和std::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;
}