En C++ 11, utilice std::stoi
como:
std::string s = "10";
int i = std::stoi(s);
Nota que std::stoi
arrojará excepción de tipo std::invalid_argument
si la conversión no se puede realizar, o std::out_of_range
si los resultados de la conversión en desbordamiento (es decir, cuando el valor de la cadena es demasiado grande para el tipo int
). Puede usar std::stol
o std:stoll
, aunque en el caso int
parece demasiado pequeño para la cadena de entrada.
En C++ 03/98, cualquiera de los siguientes puede usarse:
std::string s = "10";
int i;
//approach one
std::istringstream(s) >> i; //i is 10 after this
//approach two
sscanf(s.c_str(), "%d", &i); //i is 10 after this
Nota que los dos enfoques anteriores fallarían para la entrada s = "10jh"
. Devolverán 10 en lugar de notificar el error. Por lo tanto, el enfoque seguro y robusto es escribir su propia función que analiza la cadena de entrada y verificar que cada carácter verifique si es un dígito o no, y luego trabaje en consecuencia. Aquí es uno implemtation robusto (no probado aunque): versión
int to_int(char const *s)
{
if (s == NULL || *s == '\0')
throw std::invalid_argument("null or empty string argument");
bool negate = (s[0] == '-');
if (*s == '+' || *s == '-')
++s;
if (*s == '\0')
throw std::invalid_argument("sign character only.");
int result = 0;
while(*s)
{
if (*s >= '0' && *s <= '9')
{
result = result * 10 - (*s - '0'); //assume negative number
}
else
throw std::invalid_argument("invalid input string");
++s;
}
return negate ? result : -result; //-result is positive!
}
Esta solución se modifica ligeramente de my another solution.
es probable que quiso decir ('std ::') 'string s =" 10 "'. – lijie
Duplicado de http://stackoverflow.com/questions/200090/how-do-you-convert-ac-string-to-an-int y http://stackoverflow.com/questions/194465/how-to-parse -a-string-to-an-int-in-c –
@lijie - tal vez, pero nunca digo eso en mi código ... ¿debería estarlo? – kralco626