HOWTO · C++

Converti array di caratteri in Int in C++

Questo articolo illustra i modi per convertire un array char in tipo int in C++

In questa pagina

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