Различное форматирование печати между тестами - PullRequest
0 голосов
/ 02 марта 2019

Итак, у меня есть два теста ниже, один показывает правильный, а другой - неправильный.Мне нужно сопоставить мой неправильный с правильным.Функция печати, которая реализована, как показано ниже.Я считаю, что логика немного не так.Но я не знаю, что делать дальше.Я бы потребовал вашей помощи в этом.Спасибо.

Правильная печать:

********** 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; 
}

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

«Правильный» вывод не ограничивается использованием только std::setw(3) для всех чисел, как вы делаете в своем выводе.Требуемый вывод можно получить, используя std::setw(3) для 1-значных чисел, std::setw(4) для 2-значных чисел и std::setw(5) для 3-значных чисел, а затем пропуская 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;
}
0 голосов
/ 02 марта 2019

Не устанавливайте ширину числа, просто поставьте два пробела после числа:

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

И затем:

std::cout<< "(size=" << s.count << ", " << "capacity=" << s.capacity << ")";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...