Converti Int in una stringa in C++
- Usa Stringizing Macro per convertire Int Literal in una stringa
-
Usa il metodo
to_string()
per la conversione da int a stringa -
Usa la classe
std::stringstream
e il metodostr()
per la conversione da int a stringa -
Usa il metodo
std::to_chars
per la conversione da Int a String
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;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook