Converti Int in una stringa in C++

Jinku Hu 12 ottobre 2023
  1. Usa Stringizing Macro per convertire Int Literal in una stringa
  2. Usa il metodo to_string() per la conversione da int a stringa
  3. Usa la classe std::stringstream e il metodo str() per la conversione da int a stringa
  4. Usa il metodo std::to_chars per la conversione da Int a String
Converti Int 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;
}
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Articolo correlato - C++ Integer