Articolo originale: String to Int in C++ – How to Convert a String to an Integer Example

Quando programmi in C++, ci sono spesso casi in cui devi convertire un tipo di dato in un altro.

In questo articolo, imparerai come convertire una stringa in un intero in C++ usando i due metodi più popolari per svolgere questa operazione.

Iniziamo!

Tipi di dati in C++

Il linguaggio di programmazione C++ possiede alcuni tipi di dati integrati:

  • int, per i numeri interi (ad esempio 10, 150)
  • double, per i numeri in virgola mobile (ad esempio 5.0, 4.5)
  • char, per i caratteri singoli (ad esempio 'D', '!')
  • string, per le sequenze di caratteri (ad esempio "Hello")
  • bool, per i valori booleani (true o false)

C++ è un linguaggio di programmazione fortemente tipizzato, che vuol dire che per creare una variabile occorre dichiarare esplicitamente il tipo di valore che vi dovrà essere memorizzato.

Come dichiarare e inizializzare degli int in C++

Per dichiarare una variabile int in C++ devi prima scrivere il tipo di dato della variabile – in questo caso int. In questo modo, il compilatore sa il tipo di valore che una variabile può contenere e di conseguenza le azioni che può effettuare.

Poi, hai bisogno di dare un nome alla variabile.

Infine, non dimenticare un punto e virgola al termine dell'istruzione!

#include <iostream>

int main() {
    int age;
}

Puoi assegnare un valore alla variabile che hai creato, in questo modo:

#include <iostream>

int main() {
    int age;
    age = 28;
}

Oppure, invece di svolgere queste azioni in due passaggi separati, puoi combinarli inizializzando la variabile e alla fine stampare il risultato.

// Un file di intestazione che permette l'utilizzo di funzioni per restituire informazioni come output
//Ad esempio, cout o cin per informazioni di input
#include <iostream> 

// Un'istruzione namespace; non avrai bisogno di usare il prefisso std::
using namespace std;


int main() { // Inizio della funzione principale del programma
    int age = 28; 
    // Inizializzazione della variabile 
    // Inizializzare vuol dire specificare il tipo, il nome e il valore di una variabile.

    // output sulla console: "My age is 28", usando il chaining, <<
    cout << "My age is: " << age << endl;
}// end the main function

Come dichiarare e inizializzare delle string in C++

Le stringhe sono delle sequenze di caratteri singoli.

Dichiarare una stringa in C++ avviene in modo analogo a dichiarare e inizializzare degli int, come abbiamo visto nella sezione precedente.

La libreria standard C++ fornisce una classe string. Per poter usare il tipo di dato string, devi includere la libreria di intestazione <string> in cima al tuo file, dopo #include <iostream>.

Dopo avere aggiunto il file di intestazione, puoi anche aggiungere using namespace std; come abbiamo visto prima.

Tra le altre cose, dopo aver aggiunto questa riga, non è necessario usare std::string per creare una variabile stringa – basta soltanto string.

#include <iostream>
#include <string>
using namespace std;

int main() {
    // Dichiarazione di una variabile stringa

    string greeting;
    greeting = "Hello";
    // `=` è l'operatore di assegnazione che assegna il valore alla variabile

}

Oppure puoi inizializzare una variabile stringa e stamparla sulla console:

#include <iostream>
#include <string>
using namespace std;

int main() {
    // Inizializzazione della variabile stringa

    string greeting = "Hello";
   
   //output sulla console: "Hello"
   cout << greeting << endl;
}

Come convertire una stringa in un intero

Come detto precedentemente, C++ è un linguaggio fortemente tipizzato.

Se provi a dare un valore che non è conforme al tipo di dato, otterrai un errore.

Inoltre, convertire una stringa in un intero non è così semplice come una conversione di tipo da double a int.

Ad esempio, non puoi fare questo:

#include <iostream>
#include <string>
using namespace std;

int main() {
   string str = "7";
   int num;

   num = (int) str;
}

Dopo la compilazione otterrai questo errore:

hellp.cpp:9:10: error: no matching conversion for C-style cast from 'std::__1::string' (aka
      'basic_string<char, char_traits<char>, allocator<char> >') to 'int'
   num = (int) str;
         ^~~~~~~~~
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/string:875:5: note: candidate function
    operator __self_view() const _NOEXCEPT { return __self_view(data(), size()); }
    ^
1 error generated.

Ci sono alcuni modi per convertire una stringa in un intero. Ne vedremo due, menzionati nelle sezioni a seguire.

Conversione da string a int usando la funzione stoi()

Un modo efficace per convertire un oggetto stringa in un int numerico è usare la funzione stoi().

Questo metodo è comunemente usato nelle nuove versioni di C++, visto che è stato introdotto con C++11.

Prende come input una stringa e restituisce come output una sua versione di tipo int.

#include <iostream>
#include <string>
using namespace std;

int main() {
   // una variabile stringa chiamata str
   string str = "7";
   // stampa sulla console
   cout << "I am a string " << str << endl;

   // conversione della variabile stringa str in valore int
   // il nuovo valore viene inserito in una variabile chiamata num che contiene valori int
   int num = stoi(str);
   
   // stampa sulla console
   cout << "I am an int " << num << endl;
}

Output:

I am a string 7
I am an int 7

Conversione da string a int usando la classe stringstream

La classe stringstream è principalmente usata nelle versioni più vecchie di C++. Funziona eseguendo input e output su stringhe.

Per usarla, devi prima includere la libreria sstream in cima al programma aggiungendo la riga #include <sstream>.

Poi devi aggiungere stringstream e creare un oggetto stringstream, che conterrà il valore della stringa da convertire in un intero e sarà usato durante il processo di conversione.

L'operatore << viene usato per estrarre la stringa dalla variabile stringa.

Infine, l'operatore >> viene usato per dare come input alla variabile int il nuovo valore intero convertito.

#include <iostream>
#include <string>
#include <sstream> // ti permette di usare stringstream nel tuo programma

using namespace std;

int main() {
    // creazione di un oggetto stringstream
   stringstream ss; 
   
   // una variabile chiamata str, di tipo string
   string str = "7";
   
   // una variabile chiamata num, di tipo int
   int num;
   
   
   // estrazione della stringa dalla variabile str (la stringa viene data come input a stream)
   ss << str;
   
   // il valore convertito viene inserito nella variabile int
   ss >> num;
   
   // stampa sulla console
   cout << num << endl; // viene stampato il valore intero 7
}

Conclusione

Ed ecco fatto! Hai visto due semplici metodi per convertire una stringa in un intero in C++.

Grazie per aver letto questo articolo e buona programmazione 😊