Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
As classes, funções e operadores <iostream> de C++ suportam E/S de cadeia de caracteres formatada. Por exemplo, o código a seguir mostra como definir cout para formatar um inteiro para saída em hexadecimal. Primeiro, ele salva o estado atual para redefini-lo depois, porque uma vez que o estado do formato é passado para cout, ele permanece assim até ser alterado. Não se aplica apenas a uma linha de código.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
ios state(nullptr);
cout << "The answer in decimal is: " << 42 << endl;
state.copyfmt(cout); // save current formatting
cout << "In hex: 0x" // now load up a bunch of formatting modifiers
<< hex
<< uppercase
<< setw(8)
<< setfill('0')
<< 42 // the actual value we wanted to print out
<< endl;
cout.copyfmt(state); // restore previous formatting
}
Esta abordagem é segura em termos de tipo e extensível, mas também é complexa e verbosa.
Opções de formato alternativo
Como alternativa, você pode usar Boost.Format a partir das bibliotecas Boost C++, mesmo que não seja padrão. Você pode baixar qualquer biblioteca do Boost no site do Boost .
Algumas vantagens do Boost.Format são:
Seguro: Tipo-seguro, e lança uma exceção para erros, por exemplo, a especificação de poucos ou muitos itens.
Extensível: funciona para qualquer tipo que possa ser transmitido.
Conveniente: Strings de formato padrão POSIX e outras semelhantes.
Embora Boost.Format seja construído sobre os recursos <iostream> do C++, que são seguros e extensíveis, eles não são otimizados para desempenho. Quando precisar de otimização de desempenho, considere C printf e sprintf, que são rápidos e fáceis de usar. No entanto, eles não são extensíveis ou protegidos contra vulnerabilidades. (Existem versões seguras, mas incorrem numa ligeira penalização de desempenho. Para obter mais informações, consulte printf_s, _printf_s_l, wprintf_s, _wprintf_s_l e sprintf_s, _sprintf_s_l, swprintf_s _swprintf_s_l).
O código a seguir demonstra alguns dos recursos de formatação do Boost.
string s = str( format("%2% %2% %1%\n") % "world" % "hello" );
// s contains "hello hello world"
for( auto i = 0; i < names.size(); ++i )
cout << format("%1% %2% %|40t|%3%\n") % first[i] % last[i] % tel[i];
// Georges Benjamin Clemenceau +33 (0) 123 456 789
// Jean de Lattre de Tassigny +33 (0) 987 654 321
Ver também
Bem-vindo de volta ao C++
Referência da linguagem C++
Biblioteca padrão C++
<IOSTREAM>
<Limites>
<IOMANIP>