Atualização para C ++ 11
A partir do C++11
padrão, a conversão de string para número e vice-versa são incorporadas à biblioteca padrão. Todas as seguintes funções estão presentes em <string>
(conforme o parágrafo 21.5).
string para numérico
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
Cada um deles usa uma string como entrada e tenta convertê-la em um número. Se nenhum número válido puder ser construído, por exemplo, porque não há dados numéricos ou o número está fora do intervalo para o tipo, uma exceção é lançada ( std::invalid_argument
ou std::out_of_range
).
Se a conversão for bem-sucedida e idx
não for 0
, idx
conterá o índice do primeiro caractere que não foi usado para decodificação. Este pode ser um índice por trás do último caractere.
Finalmente, os tipos integrais permitem especificar uma base; para dígitos maiores que 9, o alfabeto é assumido ( a=10
até z=35
). Você pode encontrar mais informações sobre a exata formatação que poderão analisado aqui para números de ponto flutuante , assinado inteiros e inteiros sem sinal .
Finalmente, para cada função, há também uma sobrecarga que aceita a std::wstring
como primeiro parâmetro.
numérico para string
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Isso é mais direto: você passa o tipo numérico apropriado e recebe uma string de volta. Para opções de formatação, você deve voltar à opção C ++ 03 stringsream e usar manipuladores de fluxo, conforme explicado em outra resposta aqui.
Conforme observado nos comentários, essas funções retornam a uma precisão mantissa padrão que provavelmente não é a precisão máxima. Se for necessária mais precisão para o seu aplicativo, também é melhor voltar para outros procedimentos de formatação de string.
Também existem funções semelhantes definidas que são nomeadas to_wstring
; elas retornarão a std::wstring
.