HOWTO · C++
Converti Int in una stringa in C++
In questo articolo vengono illustrati i modi per convertire un numero intero in una stringa in C++
Questo articolo introdurrà i metodi C++ per convertire un int in una stringa.
Usa Stringizing Macro per convertire Int Literal in una stringa
Questo metodo ha un uso piuttosto limitato quando si tratta di una conversione da int a stringa. Vale a dire, può essere utilizzato solo quando i cosiddetti valori numerici hardcoded devono essere convertiti in un tipo string.
Le macro sono blocchi di codice a cui il programmatore assegna il nome e ogni volta che il nome viene utilizzato, viene sostituito con l’espansione della macro (la parte destra dell’istruzione macro).
Questa è una funzionalità del preprocessore C/C++, il che significa che puoi usarla solo con valori letterali.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define STRING(num) #num
int main() {
string num_cstr(STRING(1234));
num_cstr.empty() ? cout << "empty\n" : cout << num_cstr << endl;
return EXIT_SUCCESS;
}
Produzione:
1234
Si noti, tuttavia, quando si desidera applicare una stringa al risultato di un’altra espansione di macro (in questo esempio NUMBER che si espande in 123123), è necessario definire una macro a due livelli come mostrato nel seguente blocco di codice:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define STRING(num) STR(num)
#define STR(num) #num
#define NUMBER 123123
int main() {
string num_cstr(STRING(NUMBER));
num_cstr.empty() ? cout << "empty\n" : cout << num_cstr << endl;
return EXIT_SUCCESS;
}
Produzione:
123123
Usa il metodo to_string() per la conversione da int a stringa
to_string è una funzione di libreria incorporata <string>, che accetta un singolo valore numerico come argomento e restituisce l’oggetto string. Questo metodo è la soluzione consigliata per questo problema. Tuttavia, tieni presente che il passaggio dei valori a virgola mobile al metodo to_string produce alcuni risultati imprevisti, come dimostrato nel seguente esempio di codice:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int n1 = 9876;
double n2 = 0.0000000000000000000001;
double n3 = 2.000000000000123;
string num_str1(std::to_string(n1));
string num_str2(std::to_string(n2));
string num_str3(std::to_string(n3));
num_str1.empty() ? cout << "empty\n" : cout << num_str1 << endl;
num_str1.empty() ? cout << "empty\n" : cout << num_str2 << endl;
num_str1.empty() ? cout << "empty\n" : cout << num_str3 << endl;
return EXIT_SUCCESS;
}
Produzione:
9876
0.000000
2.000000
Usa la classe std::stringstream e il metodo str() per la conversione da int a stringa
Un’altra alternativa per risolvere questo problema è usare la classe stringstream, che memorizza internamente l’istanza string e fornisce il metodo str() per recuperare l’oggetto string dai contenuti stringstream.
#include <iostream>
#include <sstream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int n1 = 9876;
std::stringstream sstream;
sstream << n1;
string num_str = sstream.str();
num_str.empty() ? cout << "empty\n" : cout << num_str << endl;
return EXIT_SUCCESS;
}
Produzione:
9876
Usa il metodo std::to_chars per la conversione da Int a String
Il metodo seguente è relativamente complicato rispetto ad altri, poiché richiede l’inizializzazione di un array char temporaneo per l’archiviazione dei risultati convertiti. Sebbene, sul lato positivo, questo metodo sia indipendente dalla locale, non allocante e non lanciabile. La funzione to_chars prende l’intervallo dell’array char e converte l’intero in una stringa di caratteri. Una volta che i caratteri sono stati memorizzati nella variabile arr, un nuovo oggetto string viene inizializzato con l’argomento arr.data().
#include <array>
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define MAX_DIGITS 100
int main() {
int n1 = 9876;
std::array<char, MAX_DIGITS> arr{};
std::to_chars(arr.data(), arr.data() + arr.size(), n1);
string num_str(arr.data());
cout << num_str << endl;
return EXIT_SUCCESS;
}