#c #printing #format
#c #печать #формат
Вопрос:
Итак, у меня есть два приведенных ниже тестовых примера, один из которых показывает правильность, а другой неверен. Мне нужно сопоставить мой неправильный вариант с правильным. Функция печати, которая реализована следующим образом. Я считаю, что логика немного неправильная. Но я не знаю, что делать дальше. Мне потребовалась бы ваша помощь в этом. Спасибо.
Правильная печать:
********** 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>amp; 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;
}
Ответ №1:
Не задавайте ширину числа, просто поставьте два пробела после числа:
std::cout << static_cast<unsigned int>(s.v[i]) << " ";
И затем:
std::cout<< "(size=" << s.count << ", " << "capacity=" << s.capacity << ")";
Ответ №2:
«Правильный» вывод не ограничивается использованием только 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>amp; 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>amp; 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;
}