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::stringstreame il metodostr()per la conversione da int a stringa -
Usa il metodo
std::to_charsper 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