Saltar a contenido

Última actualización:2026-10-12

Convertir string a int en C++

Cuenta pública personal de WeChat:

wechat

Primero, las soluciones propuestas:

  • atoi
  • strtol
  • stoi

¿En qué se diferencian? A continuación, una comparación mediante pruebas.

Funciones estilo C

Comparación entre atoi y strtol:

string str = "16s";
int a = atoi(str.c_str());
int b = strtol(str.c_str(), nullptr, 10);

Salida:

atoi的结果为:16
strtol的结果为:16

Ambas funciones empiezan a buscar al inicio de la cadena un número, un signo o un punto decimal, y terminan al toparse con un carácter no válido.

Por eso, al llegar al carácter s anterior dejan de emitir y acaban antes; es decir, cuando tu cadena no es un número, o contiene un punto decimal u otro carácter no numérico, ¡no se lanza ninguna excepción! Devuelve directamente 0.

Por ejemplo:

string str = "asdsa";
int a = atoi(str.c_str());
int b = strtol(str.c_str(), nullptr, 10);

Salida:

0
0

En comparación con atoi, strtol admite la conversión en varias bases, por ejemplo en base 8, etc.

Por ejemplo:

int b = strtol(str.c_str(), nullptr, 8);

Estilo C++

En C++ se puede usar stoi para convertir a int; la mayor particularidad de esta función frente a las dos anteriores es: ¡las excepciones!

Sabemos que C++ incorpora excepciones respecto al lenguaje C, y esta es precisamente la capacidad más notable de esta función en C++.

Por ejemplo:

string str1 = "asq,";
//    int c = stoi(str1);    // 报异常
string str2 = "12312";
int c = stoi(str2);     // ok
cout << c << endl;

La excepción es la siguiente:

terminate called after throwing an instance of 'std::invalid_argument'
what():  stoi

Personalizado

Es decir, escribirlo uno mismo, así:

int stringToInt(const string &s) {
    int v;
    stringstream ss;
    ss << s;
    ss >> v;
    return v;
}
int main() {
    int i = stringToInt("2.3");
    cout<<i<<endl;
}

Temas relacionados

Comentarios