Ir para o conteúdo

Última atualização:2026-10-12

Converter string para int em C++

Conta pública pessoal no WeChat:

wechat

Primeiro, apresentamos as soluções:

  • atoi
  • strtol
  • stoi

Qual a diferença entre eles? Abaixo, um teste comparativo.

Funções no estilo da linguagem C

Comparação entre atoi e strtol:

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

Saída:

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

Essas duas funções começam a procurar, a partir do início da string, por números, sinais de positivo ou negativo, ou pontos decimais, e param ao encontrar um caractere inválido.

Portanto, ao chegar no caractere s mencionado acima, a saída termina antecipadamente; ou seja, quando a sua string não é um número, ou contém pontos decimais e outros caracteres não numéricos, nenhuma exceção é lançada! O valor 0 é retornado diretamente.

Por exemplo:

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

Saída:

0
0

Em comparação com o atoi, o strtol oferece suporte à conversão entre várias bases, como a base 8 (octal), por exemplo

Por exemplo:

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

Estilo C++

Em C++, é possível usar stoi para converter para int; a maior característica dessa função em relação às duas anteriores é: exceções!

Sabemos que o C++, em comparação com a linguagem C, possui exceções — e essa é a funcionalidade mais marcante dessa função no C++.

Por exemplo:

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

A exceção é a seguinte:

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

Implementação personalizada

Ou seja, escrever a sua própria, como segue:

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;
}

Tópicos relacionados

Comentários