Wie konvertiert man Int in eine Zeichenkette in C++
- Stringizing-Makro zur Konvertierung von Int-Literal in eine Zeichenkette verwenden
-
Verwendung von die Methode
to_string()
für die Konvertierung von Int in String -
Verwendung von die Klasse
std::stringstream
und die Methodestr()
für die Konvertierung von Int in String -
Verwendung von die Methode
std::to_chars
für die Konvertierung von Int in String
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;
}
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