C++ может setwill и setfill pad конец строки?

Есть ли способ сделать setw а также setfill дополнить конец строки вместо передней?

У меня есть ситуация, когда я печатаю что-то вроде этого.

 CONSTANT TEXT variablesizeName1 .....:number1 

 CONSTANT TEXT varsizeName2 ..........:number2

Я хочу добавить переменную сумму '.' до конца

"CONSTANT TEXT variablesizeName#" так что я могу сделать ":number#" выстроиться на экране.

Примечание: у меня есть массив "variablesizeName#" так что я знаю самый широкий случай.

Или же

Должен ли я сделать это вручную, установив setw как это

for( int x= 0; x < ARRAYSIZE; x++)
{
string temp = string("CONSTANT TEXT ")+variabletext[x];
cout <<  temp;
cout << setw(MAXWIDTH - temp.length) << setfill('.') <<":";
cout << Number<<"\n";
}

Я думаю, что это сделало бы работу, но это кажется немного неуклюжим.

Идеи?

3 ответа

Решение

Вы можете использовать манипуляторы std::left , std::right , а также std::internal выбрать, куда идут символы заполнения.

Для вашего конкретного случая, что-то вроде этого может сделать:

#include <iostream>
#include <iomanip>
#include <string>

const char* C_TEXT = "Constant text ";
const size_t MAXWIDTH = 10;

void print(const std::string& var_text, int num)
{
    std::cout << C_TEXT
              // align output to left, fill goes to right
              << std::left << std::setw(MAXWIDTH) << std::setfill('.')
              << var_text << ": " << num << '\n';
}

int main()
{
    print("1234567890", 42);
    print("12345", 101);
}

Выход:

Constant text 1234567890: 42
Constant text 12345.....: 101

РЕДАКТИРОВАТЬ: как упоминалось в ссылке, std::internal работает только с целыми числами, с плавающей запятой и денежной продукцией. Например, для отрицательных целых чисел будут вставлены символы заполнения между отрицательным знаком и самой левой цифрой.

Это:

int32_t i = -1;
std::cout << std::internal
          << std::setfill('0')
          << std::setw(11)  // max 10 digits + negative sign
          << i << '\n';
i = -123;
std::cout << std::internal
          << std::setfill('0')
          << std::setw(11)
          << i;

будет выводить

-0000000001
-0000000123

Что-то вроде:

cout << left << setw(MAXWIDTH) << setfill('.') << temp << ':' << Number << endl;

Производит что-то вроде:

derp..........................:234
herpderpborp..................:12345678
#include <iostream>
#include <iomanip>

int main()
{
   std::cout
      << std::setiosflags(std::ios::left) // left align this section
      << std::setw(30)                    // within a max of 30 characters
      << std::setfill('.')                // fill with .
      << "Hello World!"
      << "\n";
}

//Output:
Hello World!..................
Другие вопросы по тегам