2011-12-20 14 views
9

Cómo hacer un entero -> la conversión de cadenas ha sido respondida muchas veces en Internet ... sin embargo, estoy buscando la forma más compacta de "C++" para hacer esto.entero para la conversión de cadenas/concatenación de cadenas enteras en C++: ¿soluciones más compactas?

Puesto que usted es capaz de concatenar cadenas utilizando el sobrecargada operador +, sería preferible que sea capaz de hacer algo en la línea de la x = (stringvariable + str (intVariable)) python-ish concatenación, pero No sé si hay una manera canónica de hacer esto en C++.

soluciones

El más comunes que veo son:

stringstream: Si es posible, sería agradable no tener 3 líneas de código (declaración, por escrito a la corriente, la conversión a cadena) sólo para concatenar unas cartas y números.

itoa: esto funciona, pero estoy buscando una solución canónica de C++. Además, creo que itoa es técnicamente no estándar, aunque podría estar equivocado.

boost format/boost léxico elenco: esto también funciona, pero ¿no hay nada en vainilla C++ que haga el trabajo?

+3

Tenga en cuenta que las cadenas de caracteres realmente hacen el trabajo. Sugerencia: no invente (no) problemas. :) – Kos

+1

@Kos Solo una manía, pero es 'std :: ostringstream' que hace el trabajo aquí. –

+0

@JamesKanze: para realmente identificar, el trabajo real de conversión se realiza en el 'operador <<' apropiado en ostreams. – PlasmaHH

Respuesta

17
#include <string> 

cadena a entero: int n = std::stoi(s);

entero en cadena: std::string s = std::to_string(n);

+0

Genial, otra característica nueva que aún no conozco (vale la pena mencionar que oficialmente ni siquiera tiene 1 año y que algunos compiladores o compiladores aún no se han puesto al día). – Kos

+0

@Kos: Oficialmente tiene 3,5 meses;) (2011-09-01) – PlasmaHH

+0

C++ 11 hace que mi código sea mucho más fácil de mantener. Afortunadamente, ser uno de los primeros en adoptar no me pica (en términos de compatibilidad con el compilador, estándares de codificación de la compañía, etc.). – daj

0

¿Qué le pasa a tener 3 líneas para convertir? Si necesita usar el mismo tipo de concatenación en cualquier momento, simplemente póngalo en una función y listo. Sería mejor que usar soluciones extrañas.

2

stringVariable + boost::lexical_cast<std::string>(intVariable) harían el truco, pero no estoy seguro de que sea una buena idea. Incluso en Python, algo como '{}{:6f}'.format(stringVariable, intVariable) sería mucho más habitual.

4

C++ 11 tiene std::to_string, pero en C++ 03 no hay "solución de llamada de función única". También boost::lexical_cast (aunque especializado para ciertos casos) y std::to_string finalmente llaman al operator<<(std::ostream&,T) para cualquier T que deberían convertir. Se trata de ser capaz de manejar genéricamente las cosas, y cuando op<< ya está allí, ¿por qué no reutilizarlo para crear una representación de cadena?

Cuestiones relacionadas