String in Int-Array konvertieren in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktionen std::getline und std::stoi, um string in C++ in das Array int zu konvertieren
  2. Verwendung der Funktionen std::string::find und std::stoi zur Umwandlung von string in ein int-Array in C++
  3. Verwenden der Funktionen std::copy und std::remove_if zum Konvertieren von string in int Array in C++
String in Int-Array konvertieren in C++

Dieser Artikel zeigt verschiedene Methoden zum Konvertieren von Zeichenketten in int-Arrays in C++.

Verwenden Sie die Funktionen std::getline und std::stoi, um string in C++ in das Array int zu konvertieren

std::stoi wird verwendet, um Zeichenkettenwerte in eine vorzeichenbehaftete Ganzzahl umzuwandeln, und es wird ein obligatorisches Argument vom Typ std::string verwendet. Optional kann die Funktion zwei zusätzliche Argumente annehmen, von denen das erste zum Speichern des Index des letzten nicht konvertierten Zeichens verwendet werden kann. Das dritte Argument kann optional die Zahlenbasis der Eingabe angeben. Beachten Sie, dass wir die durch Kommas getrennten Zahlen als EingabeZeichenkette wie die CSV-Datei annehmen. Daher verwenden wir die Funktion getline, um jede Zahl zu parsen und den Wert dann an stoi zu übergeben. Wir speichern auch jede Zahl im std::vector-Container, indem wir bei jeder Iteration die Methode push_back aufrufen.

#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;

int main(int argc, char *argv[]) {
  string text = "125, 44, 24, 5543, 111";
  vector<int> numbers;
  int num;

  stringstream text_stream(text);
  string item;
  while (std::getline(text_stream, item, ',')) {
    numbers.push_back(stoi(item));
  }

  for (auto &n : numbers) {
    cout << n << endl;
  }

  exit(EXIT_SUCCESS);
}

Ausgabe:

125
44
24
5543
111

Verwendung der Funktionen std::string::find und std::stoi zur Umwandlung von string in ein int-Array in C++

Alternativ können wir eine integrierte Methode find der Klasse std::string verwenden, um die Position des Komma-Trennzeichens abzurufen, und dann die Funktion substr aufrufen, um die Nummer abzurufen. Dann wird das Ergebnis substr an das stoi übergeben, das selbst mit der Methode push_back verkettet ist, um die Zahl im Vektor zu speichern. Beachten Sie, dass nach der while-Schleife die Zeile steht, die zum Extrahieren der letzten Nummer in der Sequenz erforderlich ist.

#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;

int main(int argc, char *argv[]) {
  string text = "125, 44, 24, 5543, 111";
  vector<int> numbers;

  size_t pos = 0;
  while ((pos = text.find(',')) != string::npos) {
    numbers.push_back(stoi(text.substr(0, pos)));
    text.erase(0, pos + 1);
  }
  numbers.push_back(stoi(text.substr(0, pos)));

  for (auto &n : numbers) {
    cout << n << endl;
  }

  exit(EXIT_SUCCESS);
}

Ausgabe:

125
44
24
5543
111

Verwenden der Funktionen std::copy und std::remove_if zum Konvertieren von string in int Array in C++

Eine andere Methode zum Extrahieren von Ganzzahlen ist die Verwendung des Algorithmus std::copy in Verbindung mit std::istream_iterator und std::back_inserter. Diese Lösung speichert die Zeichenkettenwerte in einem Vektor und gibt sie an den Stream cout aus. Sie können jedoch problemlos die Funktion std::stoi hinzufügen, um jedes Element in den Wert int zu konvertieren. Beachten Sie jedoch, dass im folgenden Beispielcode die Zahlen nur als Zeichenkettenwerte gespeichert werden.

#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;

int main(int argc, char *argv[]) {
  string text = "125, 44, 24, 5543, 111";

  vector<string> nums;
  std::istringstream iss(text);
  copy(std::istream_iterator<string>(iss), std::istream_iterator<string>(),
       std::back_inserter(nums));

  for (auto &n : nums) {
    n.erase(std::remove_if(n.begin(), n.end(), ispunct), n.end());
    cout << n << endl;
  }

  exit(EXIT_SUCCESS);
}

Ausgabe:

125
44
24
5543
111
Autor: 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

Verwandter Artikel - C++ String