Converti array di caratteri in Int in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione std::strtol per convertire un array di caratteri in un int
  2. Usa la funzione sscanf() per convertire un array di caratteri in un int
Converti array di caratteri in Int in C++

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
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++ Char