Analizzare un int da una stringa in C++
-
Usa la funzione
std::stoi
per analizzare l’int dalla stringa -
Usa la funzione
std::from_chars
per analizzare l’int dalla stringa
Questo articolo spiegherà diversi metodi su come analizzare un int
da una stringa in C++.
Usa la funzione std::stoi
per analizzare l’int dalla stringa
La funzione stoi
fa parte della libreria di stringhe definita nell’intestazione string
e può essere utilizzata per convertire i valori delle stringhe in diversi tipi numerici. std::stoi
, std::stol
e std::stoll
sono usati per la conversione di interi con segno. La funzione stoi
accetta un singolo oggetto string
come argomento obbligatorio, ma il programmatore può anche specificare l’indirizzo per memorizzare il numero intero e la base numerica in cui la stringa di input deve essere elaborata.
L’esempio seguente mostra più casi d’uso della funzione stoi
. Nota che stoi
può gestire gli spazi bianchi iniziali nella stringa, ma qualsiasi altro carattere causerà un’eccezione std::invalid_argument
.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
num1 = stoi(s1);
num2 = stoi(s2);
num3 = stoi(s3);
num4 = stoi(s4, nullptr, 2);
num5 = stoi(s5);
num6 = stoi(s6, nullptr, 16);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
Produzione:
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: 333 | num6: 51
Usa la funzione std::from_chars
per analizzare l’int dalla stringa
In alternativa, la funzione from_chars
dalla libreria delle utilità può analizzare i valori int
. Fa parte della libreria standard sin dalla versione C++ 17 ed è definito nel file di intestazione <charconv>
.
Molto diverso da stoi
, from_chars
opera sugli intervalli di caratteri, non essendo a conoscenza della lunghezza e dei bordi dell’oggetto. Pertanto, il programmatore deve specificare l’inizio e la fine dell’intervallo come primi due argomenti. Il terzo argomento è la variabile int
a cui verrà assegnato il valore convertito.
Attenzione però, from_chars
può gestire solo il segno -
iniziale nella stringa di input; quindi stampa i valori spazzatura di num5
e num6
nell’esempio seguente.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::from_chars;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
from_chars(s1.c_str(), s1.c_str() + s1.length(), num1);
from_chars(s2.c_str(), s2.c_str() + s2.length(), num2);
from_chars(s3.c_str(), s3.c_str() + s3.length(), num3);
from_chars(s4.c_str(), s4.c_str() + s4.length(), num4, 2);
from_chars(s5.c_str(), s5.c_str() + s5.length(), num5);
from_chars(s6.c_str(), s6.c_str() + s6.length(), num6);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
Produzione:
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: -1858679306 | num6: 0
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