Wie konvertiert man Int in eine Zeichenkette in C++

Jinku Hu 12 Oktober 2023
  1. Stringizing-Makro zur Konvertierung von Int-Literal in eine Zeichenkette verwenden
  2. Verwendung von die Methode to_string() für die Konvertierung von Int in String
  3. Verwendung von die Klasse std::stringstream und die Methode str() für die Konvertierung von Int in String
  4. Verwendung von die Methode std::to_chars für die Konvertierung von Int in String
Wie konvertiert man Int in eine Zeichenkette in C++

Dieser Artikel stellt C++-Methoden zur Konvertierung eines int in eine Zeichenkette vor.

Stringizing-Makro zur Konvertierung von Int-Literal in eine Zeichenkette verwenden

Diese Methode hat einen recht begrenzten Nutzen, wenn es um eine Konvertierung von int in Zeichenketten geht. Sie kann nämlich nur verwendet werden, wenn so genannte hartkodierte numerische Werte in einen string-Typ konvertiert werden müssen.

Makros sind Code-Blöcke, denen der Programmierer den Namen zuweist, und wenn der Name verwendet wird, wird er durch Makro-Erweiterung (der rechte Teil der Makro-Anweisung) ersetzt.

Dies ist eine Funktion des C/C++-Präprozessors, was bedeutet, dass Sie diese nur mit literalen Werten verwenden können.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

#define STRING(num) #num

int main() {
  string num_cstr(STRING(1234));
  num_cstr.empty() ? cout << "empty\n" : cout << num_cstr << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

1234

Beachten Sie jedoch, wenn Sie das Ergebnis einer anderen Makroexpansion stringieren wollen (in diesem Beispiel NUMBER, die zu 123123 expandiert), müssen Sie ein zweistufiges Makro definieren, wie im folgenden Codeblock gezeigt:

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

#define STRING(num) STR(num)
#define STR(num) #num

#define NUMBER 123123

int main() {
  string num_cstr(STRING(NUMBER));
  num_cstr.empty() ? cout << "empty\n" : cout << num_cstr << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

123123

Verwendung von die Methode to_string() für die Konvertierung von Int in String

to_string ist eine eingebaute <string> Bibliotheksfunktion, die einen einzelnen numerischen Wert als Argument nimmt und ein string Objekt zurückgibt. Diese Methode ist die empfohlene Lösung für dieses Problem. Beachten Sie jedoch, dass die Übergabe der Fließkomma-Werte an die to_string-Methode einige unerwartete Ergebnisse liefert, wie im folgenden Code-Beispiel gezeigt wird:

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  int n1 = 9876;
  double n2 = 0.0000000000000000000001;
  double n3 = 2.000000000000123;

  string num_str1(std::to_string(n1));
  string num_str2(std::to_string(n2));
  string num_str3(std::to_string(n3));

  num_str1.empty() ? cout << "empty\n" : cout << num_str1 << endl;
  num_str1.empty() ? cout << "empty\n" : cout << num_str2 << endl;
  num_str1.empty() ? cout << "empty\n" : cout << num_str3 << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

9876
0.000000
2.000000

Verwendung von die Klasse std::stringstream und die Methode str() für die Konvertierung von Int in String

Eine andere Alternative, um dieses Problem zu lösen, ist die Verwendung der Klasse stringstream, die die Instanz string intern speichert und die Methode str() zur Verfügung stellt, um das Objekt string aus den Inhalten von stringstream abzurufen.

#include <iostream>
#include <sstream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  int n1 = 9876;

  std::stringstream sstream;
  sstream << n1;

  string num_str = sstream.str();
  num_str.empty() ? cout << "empty\n" : cout << num_str << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

9876

Verwendung von die Methode std::to_chars für die Konvertierung von Int in String

Die folgende Methode ist im Vergleich zu anderen relativ umständlich, da für die Speicherung der konvertierten Ergebnisse ein temporäres char-Array initialisiert werden muss. Obwohl, auf der positiven Seite, diese Methode lokal-unabhängig, nicht zuweisend und nicht werfend ist. Die Funktion to_chars nimmt den Bereich des Arrays char und wandelt die ganze Zahl in eine Zeichenkette um. Sobald die Zeichen in der Variablen arr gespeichert sind, wird ein neues string-Objekt mit dem Argument arr.data() initialisiert.

#include <array>
#include <charconv>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

#define MAX_DIGITS 100

int main() {
  int n1 = 9876;
  std::array<char, MAX_DIGITS> arr{};

  std::to_chars(arr.data(), arr.data() + arr.size(), n1);
  string num_str(arr.data());
  cout << num_str << endl;

  return EXIT_SUCCESS;
}
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++ Integer