Justificar correctamente a produção em C++
-
Utilizar
std::right
estd::setw
para Right Justify Output in C++ -
Utilize a função
printf
para justificar a saída em C++
Este artigo irá demonstrar múltiplos métodos sobre como justificar correctamente o fluxo de saída em C++.
Utilizar std::right
e std::setw
para Right Justify Output in C++
A biblioteca padrão C++ fornece funções de ajuda do manipulador de E/S para controlar melhor os fluxos quando utilizado com operadores << >>
, e estão incluídos no ficheiro de cabeçalho <iomanip>
. O std::right
é um dos manipuladores de fluxo que define a posição dos caracteres de preenchimento. Assim, deve ser utilizado em conjunto com a função manipuladora std::setw
, que é utilizada para definir a largura do fluxo. std::setw
toma um único número inteiro como argumento para especificar o número de caracteres a atribuir para a largura do fluxo.
No próximo exemplo de código, inicializamos um vector de double
com valores arbitrários que têm uma precisão diferente e depois emitimos todos eles como justificado no lado direito da consola.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
cout << right << setw(20) << fixed << i << endl;
}
cout << endl;
return EXIT_SUCCESS;
}
Resultado:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
Utilize a função printf
para justificar a saída em C++
Outra função poderosa para lidar com a formatação I/O é printf
. Embora o printf
não seja utilizado com fluxos de cin
/cout
, pode formatar argumentos variáveis separadamente. Note-se que utilizamos o especificador de formato %f
para os valores de ponto flutuante, e utilizamos um número arbitrário 20
para adicionar caracteres de preenchimento a cada elemento. Como resultado, cada linha tem 20
caracteres de largura, e uma vez que o número é positivo, os caracteres de preenchimento são anexados a partir da esquerda.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
printf("%20f\n", i);
}
return EXIT_SUCCESS;
}
Resultado:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
Em alternativa, podemos inserir um inteiro negativo no especificador de formato para preencher caracteres do lado direito, justificando a saída à esquerda. Outra característica poderosa do printf
é a formatação de valores literais de string, como demonstrado no seguinte código de amostra. Note-se que %c
é o especificador de formato char
, e o valor 0x20
é hexadecimal para um caractere de espaço.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
printf("%-20f\n", i);
}
printf("%60s\n", "this ought to be justified right");
printf("%-20s|%20c|%20s\n", "wandering", 0x20, "the tower");
return EXIT_SUCCESS;
}
Resultado:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
this ought to be justified right
wandering | | the tower
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook