usar resueltos leer imprimir funciones ejercicios ejemplos como caracteres cadenas cadena arreglo c++ integer stdstring

c++ - resueltos - imprimir cadena de caracteres en c



Convierta un nĂºmero en una cadena con longitud especificada en C++ (7)

Hay muchas maneras de hacer esto. El más simple sería:

int n = 999; char buffer[256]; sprintf(buffer, "%06d", n); string str(buffer);

Tengo algunos números de diferente longitud (como 1, 999, 76492, etc.) y quiero convertirlos a cadenas con una longitud común (por ejemplo, si la longitud es 6, esas cadenas serán: ''000001'' , ''000999'', ''076492'').

En otras palabras, necesito agregar la cantidad correcta de ceros iniciales al número.

int n = 999; string str = some_function(n,6); //str = ''000999''

¿Hay una función como esta en C ++?



Este método no usa flujos ni sprintf. Además de tener problemas de bloqueo, los flujos generan una sobrecarga de rendimiento y es realmente una exageración. Para las transmisiones, la sobrecarga proviene de la necesidad de construir el almacenamiento intermedio de vapor y flujo. Para sprintf, la sobrecarga proviene de la necesidad de interpretar la cadena de formato. Esto funciona incluso cuando n es negativo o cuando la representación de cadena de n es más larga que len . Esta es la solución MÁS RÁPIDA.

inline string some_function(int n, int len) { string result(len--, ''0''); for (int val=(n<0)?-n:n; len>=0&&val!=0; --len,val/=10) result[len]=''0''+val%10; if (len>=0&&n<0) result[0]=''-''; return result; }


Una cosa de la que puede que desee tener conocimiento es el bloqueo potencial que puede stringstream cuando utiliza el enfoque de stringstream . En el STL que se incluye con Visual Studio 2008, al menos, se eliminan y liberan muchos bloqueos a medida que se utiliza información diversa de la configuración regional durante el formateo. Esto puede ser, o no, un problema para usted, dependiendo de la cantidad de subprocesos que tenga que puedan convertir simultáneamente números en cadenas ...

La versión sprintf no tiene bloqueos (al menos de acuerdo con la herramienta de control de bloqueo que estoy desarrollando en este momento ...) y, por lo tanto, podría ser "mejor" para usar en situaciones concurrentes.

Solo noté esto porque mi herramienta escupió recientemente los bloqueos ''locale'' como uno de los bloqueos más disputados en mi sistema servidor; me sorprendió un poco y puede hacer que revise el enfoque que he tomado (es decir, volver al sprintf de la stringstream de stringstream ) ...


char str[7]; snprintf (buf, 7, "%06d", n);

Ver snprintf


o usando las cadenas de caracteres:

#include <sstream> #include <iomanip> std::stringstream ss; ss << std::setw(10) << std::setfill(''0'') << i; std::string s = ss.str();

Recopilé la información que encontré en arachnoid.com porque me gusta más el modo seguro de iostremas. Además, también puede usar este código en cualquier otro flujo de salida.