una to_string sprintf pasar numero entero convertir cadena c++ arrays integer

c++ - to_string - Conversión de entero a matriz



string to int c´++ (11)

Me gustaría convertir un entero en una matriz, para que se vea así:

int number = 123456 ; int array[7] ;

con el resultado:

array[0] = 1 array[1] = 2 ... array[6] = 6


Aquí lo que se me ocurrió, la función integerToArray devuelve un vector que se convierte a partir del valor entero. también puedes probarlo con la función principal:

#include <iostream> #include <vector> using namespace std; vector <int> integerToArray(int x) { vector <int> resultArray; while (true) { resultArray.insert(resultArray.begin(), x%10); x /= 10; if(x == 0) return resultArray; } } int main() { vector <int> temp = integerToArray(1234567); for (auto const &element : temp) cout << element << " " ; return 0; } //outputs 1 2 3 4 5 6 7


La forma más fácil que me puedo imaginar ahora es:

char array[40]; int number = 123456; memset(array, 0x00, sizeof(array)); sprintf(array, "%d", number);

Además puede convertir cada dígito a int simplemente restando el valor de char por 0x30.

EDITAR : Si esto es una tarea, su profesor probablemente le pida que escriba el programa usando% operator (ejemplo 12% 10 = 2). Si este es el caso, buena tarea ;-)


No puedes simplemente "convertirlo". El número entero no se representa en software en notación decimal. Entonces los dígitos individuales que quieres no existen. Ellos tienen que ser calculados.

Entonces, dado un número arbitrario, ¿cómo puedes determinar el número de unos?

Podríamos dividir por diez, y luego tomar el resto: para 123, la división daría 12, y luego hay un resto de 3. Entonces tenemos 3 unidades. El 12 nos dice lo que tenemos más allá de los que están, por lo que puede ser nuestra entrada para la próxima iteración. Tomamos eso, dividimos por 10, obtenemos 1 y un resto de 2. Entonces tenemos 2 en el lugar de las decenas, y 1 restante para trabajar por cientos. Divida eso entre 10, lo que nos da cero, y un resto de 1. Entonces obtenemos 1 en el lugar de las centenas, 2 en el lugar de las decenas y 3 en el lugar de las unidades. Y hemos terminado, ya que la última división regresó a cero.


Puede extraer el último dígito del número de esta manera:

int digit = number % 10; number /= 10;

Tenga en cuenta que también debe verificar si el number es positivo. Otros valores requieren manejo adicional.


Puedes usar el módulo para determinar el último dígito.

Y puede usar la división para mover otro dígito a la posición del último dígito.


Si quisiera convertirlo en una cadena, sería muy fácil, simplemente haga lo que todos los demás dicen sobre usar el operador%:

Digamos num = 123, podemos hacer esto:

string str; while (num > 0) { str = (num % 10) + str; //put last digit and put it into the beginning of the string num = num /10; //strip out the last digit }

Ahora puedes usar str como una matriz de caracteres. Hacer esto con una matriz es una molestia porque poner cosas al comienzo de una matriz requiere que cambies todo lo demás. Lo que podemos hacer es, en lugar de poner cada dígito en una cadena, podemos ponerlo en una pila. Lo pondrá en un orden inverso al siguiente: 3 2 1. Luego, podemos abrir el número superior uno por uno y ponerlo en una matriz en el orden correcto. Tu matriz se verá así: 1 2 3. Dejaré la implementación para ti porque es tarea.

@Broam tiene una buena solución, pero como dijo, es para trabajar hacia atrás. Creo que el OP o quien venga buscando este hilo lo querrán y es por eso que estoy publicando esto. Si tiene una mejor solución, responda, también estoy interesado.


Tal vez una mejor solución es trabajar al revés:

123456 % 10 = 6

123456 / 10 = 12345

12345 % 10 = 5

12345 / 10 = 1234


Tome el log10 del número para obtener la cantidad de dígitos. Ponlo, di pos , luego, en un bucle, toma el módulo de 10 ( n % 10 ), coloca el resultado en la matriz en la posición pos . Disminuir pos y dividir el número por 10. Repetir hasta pos == 0

¿Qué quieres hacer con el signo si es negativo?



si esto es realmente tarea, muéstralo a tu maestra, solo por diversión ;-)

¡PRECAUCIÓN! rendimiento muy pobre, forma torpe de alcanzar el efecto que espera y generalmente no lo hace en casa (trabajo) ;-)

#include <algorithm> #include <iostream> #include <sstream> #include <string> #include <vector> typedef std::vector< int > ints_t; struct digit2int { int operator()( const char chr ) const { const int result = chr - ''0''; return result; } }; void foo( const int number, ints_t* result ) { std::ostringstream os; os << number; const std::string& numberStr = os.str(); std::transform( numberStr.begin(), numberStr.end(), std::back_inserter( *result ), digit2int() ); } int main() { ints_t array; foo( 123456, &array ); std::copy( array.begin(), array.end(), std::ostream_iterator< int >( std::cout, "/n" ) ); }


solo use aritmética modular:

int array[6]; int number = 123456; for (int i = 5; i >= 0; i--) { array[i] = number % 10; number /= 10; }