Convertir de entero a string

Discussion on C, C++ and C++11 at the COJ. This is the place to clear your doubts about these languages, and to share with the community the new things you learn about them.
Post Reply
User avatar
luismawolf
Posts: 30
Joined: 4 years ago
Gender: Male

Convertir de entero a string

Post by luismawolf » 2 years ago

Como puedo convertir de entero a string en una base dada?



User avatar
isaac
Posts: 83
Joined: 3 years ago
Gender: None specified

Re: Convertir de entero a string

Post by isaac » 2 years ago

Muy Facil, con la funcion itoa. Los parametros son: itoa(cadena_que_quieres_convertir, cadena_donde_guargas_el_resultado, base). Por desgracia no te va a servir para nada en el COJ porque como se ha mencionado en varias ocasiones, el servidor del COJ esta corriendo sobre Ubuntu y los compiladores que hay para linux no tienen esta funcion. Tendras que implementarla. Eso es bastante facil:

Ejemplo:
int n = 192839823, base=3;
string res;

/// Algoritmo usual de cambio de base
while(n) {
res.push_back(n % base + '0');
n /= base;
}

/// Se inserta un cero al final para el caso en que n sea cero
res.push_back('0');

/// Se eliminan todos los ceros del final siempre y cuando la cantidad de
/// caracteres que compongan el numero sean > 1, garantizando que si
/// el numero es cero, no se elimine.
while(res.size() > 1 && res[res.size()-1] == '0')
res.erase(res.size()-1, 1);

/// invertir la cadena
res = string(res.rbegin(), res.rend());

User avatar
luismawolf
Posts: 30
Joined: 4 years ago
Gender: Male

Re: Convertir de entero a string

Post by luismawolf » 2 years ago

/// Algoritmo usual de cambio de base
while(n) {
res.push_back(n % base + '0');
n /= base;
}

en la parte del push_back me dice que no puede coger eso como argumento porque no es un char

User avatar
alurquiza
Posts: 54
Joined: 3 years ago
Gender: Male

Re: Convertir de entero a string

Post by alurquiza » 2 years ago

A mi tu code me compila bien, pero intenta ponerlo asi:
res.push_back('0' + n % base);

Post Reply

Return to “C/C++/C++11”