C++ манипуляции с использованием библиотеки iomanip

Я новичок в библиотеках C++ STL и мне нужна помощь.
Я хочу добавить два числа, предположим, что A = 4555 и B = 50, и вывести их как:

4555
+50
4605

Другие примеры:

500000 + 12

+500000
+12
500012

Если я храню и A и B в целочисленном типе данных, тогда как знак "+" в символьном типе данных. Как я могу манипулировать ими, чтобы получить предпочтительный вывод. Я просто не могу понять, как манипулировать двумя переменными вместе.

3 ответа

Решение

Если бы вы могли использовать постоянную ширину (или переменную ширину, равную максимальной ширине участвующих чисел) с std::setw от <iomanip> как:

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

void display_sum(int a, int b)
{
    std::cout << std::setw(10) << a  << "\n"
              << std::setw(10) << ("+" + std::to_string(b)) << "\n"
              << std::setw(10) << (a+b) <<"\n" << std::endl;
}

int main()
{
    display_sum(4555, 50);
    display_sum(500000, 12);
    display_sum(503930, 3922);
}

Выход:

  4555
   +50
  4605

500000
   +12
500012

503930
 +3922
507852

Онлайн демо

Вы можете использовать манипуляторы std::showpos, std::noshowpos и std:: setw:

#include <iostream>
#include <iomanip>

int main() {
    int a = 4555;
    int b = 50;
    std::cout
        << std::noshowpos << std::setw(10) << a << '\n'
        << std::showpos   << std::setw(10) << b << '\n'
        << std::noshowpos << std::setw(10) << (a+b) << '\n';
}

Если вам нужна ширина в зависимости от значений, вы можете использовать три std::ostringstream(s) и создать промежуточные строки (без setw). После этого вы печатаете строки, используя максимальную длину каждого для setw:

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <sstream>

int main() {
    int a = 4555;
    int b = 50;

    std::ostringstream as;
    std::ostringstream bs;
    std::ostringstream rs;
    as << std::noshowpos << a;
    bs << std::showpos   << b;
    rs << std::noshowpos << (a+b);
    unsigned width = std::max({ as.str().size(), bs.str().size(), rs.str().size() });
    std::cout
        << std::setw(width) << as.str() << '\n'
        << std::setw(width) << bs.str() << '\n'
        << std::setw(width) << rs.str() << '\n';
}

Смотрите также:

Примечание: вы можете взглянуть на манипулятор std:: internal.

В вашем примере поля могут содержать до 7 символов. Возможно, вы хотите изменить размер строки до 7, прежде чем писать. например fname.resize(7),

Чтобы отформатировать, как вы хотите, вам нужно #include <iomanip> и использовать std::left а также std::setw(7),

file1 << left << setw(7) << fname
      << tab << setw(7) << lname
      << tab << setw(7) << street
      << tab << setw(7) << city
      << tab << setw(7) << state
      << tab << setw(7) << zip << endl;
Другие вопросы по тегам