Converti array di caratteri in Int in C++
-
Usa la funzione
std::strtol
per convertire un array di caratteri in un int -
Usa la funzione
sscanf()
per convertire un array di caratteri in un int
Questo articolo introdurrà i metodi C++ per convertire un array char
in un tipo int
.
Usa la funzione std::strtol
per convertire un array di caratteri in un int
Il metodo strtol
interpreta i primi caratteri validi dall’array char
in un tipo intero. La funzione prende come terzo parametro la base numerica dell’intero convertito, con un valore compreso tra - {0,2,3,...,36}
. Il secondo parametro è di tipo char **endptr
, che è opzionale, e se passato memorizza l’indirizzo puntato al carattere oltre l’ultimo carattere interpretato.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
string str1("23323experimental_string");
auto str1_n = std::strtol(str1.data(), nullptr, 10);
printf("%ld", str1_n);
return EXIT_SUCCESS;
}
Produzione:
23323
L’esempio seguente mostra la funzione strtol
con il secondo parametro non nullptr. Nota che stiamo usando la funzione printf
solo come strumento di verifica del tipo, e dovresti usare cout
in tutti gli altri casi. È anche importante implementare routine di gestione degli errori per i dettagli di strtol
di cui si possono vedere qui.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
string str1("23323experimental_string");
char *char_part = nullptr;
auto str1_n = std::strtol(str1.data(), &char_part, 10);
printf("%ld\n", str1_n);
printf("%s\n", char_part);
;
return EXIT_SUCCESS;
}
Produzione:
23323
experimental_string
Usa la funzione sscanf()
per convertire un array di caratteri in un int
La funzione sscanf
legge l’input dal buffer della stringa di caratteri e lo interpreta in base all’identificatore di formato, che viene passato come secondo parametro. Il valore numerico è memorizzato nel puntatore alla variabile int
. Gli specificatori di formato sono ampiamente dettagliati nella pagina di manuale di sscanf
:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
string str1("23323experimental_string");
int str1_n;
sscanf(str1.data(), "%d", &str1_n);
printf("%d\n", str1_n);
return EXIT_SUCCESS;
}
Produzione:
23323
Possiamo anche reimplementare l’esempio precedente per memorizzare la parte non numerica della stringa di input. In questo caso, aggiungiamo l’identificatore di formato %s
al secondo argomento e passiamo il puntatore char
di destinazione come quarto argomento. Si noti che sscanf
è una funzione variadica in quanto può accettare un numero variabile di argomenti da un chiamante.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
string str1("23323experimental_string");
int str1_n3;
string str2{};
sscanf(str1.data(), "%d%s", &str1_n3, str2.data());
printf("%d\n", str1_n3);
printf("%s\n", str2.data());
return EXIT_SUCCESS;
}
Produzione:
23323
experimental_string
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