3. Variablen: Datentypen konvertieren
Datentypen-konvertieren.cpp
// Datentypen-Konvertierung und String-Verkettung

# include <stdlib.h>
# include <string>
# include <sstream>
# include <iostream>


using namespace std;

int main()
{
string name="Udo";
char beispiel[]="ist";
string bj="BJ";
string zahl;
string ausgabe;
string jahr1="1900";
string jahr2="71";
int jz1,jz2,jahreszahl;

// String in Zahlen konvertieren
istringstream(jahr1) >> jz1;
istringstream(jahr2) >> jz2;

// Jahreszahl berechnen
jahreszahl=jz1+jz2;

// Zahl in String konvertieren
ostringstream temp3;
temp3 << jahreszahl;
zahl=temp3.str();

// Strings aneinander hängen und ausgeben
ausgabe=name+" "+beispiel+" "+bj+" "+zahl;
cout << ausgabe << endl;

// Seltene Fälle: Konvertierung von string in char
string befehl="echo \""+ausgabe+"\"";
system(befehl.c_str());

return(0);
}

Die Daten im Detail:

istringstream(jahr1) >> jz1;

Für die Konvertierung eines Strings in eine Ganzzahl gibt es unter C/C++ mehrere Lösungen. Unter C++ ist meine bevorzugte Methode, die mit den sogenannten stringstreams. Für die Konvertierung von Strings in Ganzzahlen benötigt man einen istringstream und zwei Variablen, eine String-Variable (hier jahr1) und eine int-Variable (hier jz1). Man übergibt mittels istringstream(jahr1) die in Klammern stehende String-Variable jahr1 dem stringstream. Mittels des >>-Operators wird der String der int-Variablen übergeben. Es ist auch möglich mehrere Variablen aneinander zu hängen. Allerdings muß man dann eine stringstream-Variable generieren. Eine direkte Übergabe ohne Variable führt zu einer Fehlermeldung (ambiguous overload for operator>>).
Ein Beispiel:
Unsere String-Variable enthält die Zeichen a123b456.
Wir definieren ein char-Array mit zwei Elementen: char zeichen[2];
Wir definieren ein int-Array mit zwei Elementen: int zahlen[2];
Nun generiert man die stringstream-Variable und übergibt den String den Array-Variablen:
istringstream temp(jahr1);
temp >> zeichen[0] >> zahlen[0] >> zeichen[1] >> zahlen [1];

somit erhält man die Variablen:
zeichen[0]="a", zahlen[0]=123, zeichen[1]="b", zahlen[1]=456.

Unter C gibt es noch eine weitere Lösung. Dort würde der Befehl folgendermaßen aussehen:
Syntax= sscanf(string, "%d", &wert);
sscanf(jahr1, "%d", &jz1);
konvertiert die String-Variable jahr1 in die int-Variable jz1.

jahreszahl=jz1+jz2;
Nachdem wir beide Strings in Ganzzahlen konvertiert haben, kann man diese miteinander multiplizieren.
ostringstream temp3;
temp3 << jahreszahl;
zahl=temp3.str();

Um später die Strings miteinander verketten zu können, müssen wir die Ganzzahl-Variable jahreszahl wieder in eine String-Variable ändern. Der umgekehrte Weg geht mittels ostringstream. Dabei wird zuerst mittels des <<-Operators dem ostringstream temp3 der Ganzzahl-Wert der Variablen jahreszahl übergeben. Anschließend wird mit zahl=temp3.str() dem String zahl die in temp3 abgelegte
int-Variable übergeben.

Unter C lautet der Befehl:
Syntax= sprintf(string, "%d", zahl);
sprintf(zahl, "%d", jahreszahl);
Konvertiert die int-Variable jahreszahl in den String zahl.

ausgabe=name+" "+beispiel+" "+bj+" "+zahl;
Unter C++ ist es ein leichtes Strings miteinander zu kombinieren in dem man sie einfach wie bei einer Rechenoperation mittels des +-Operators aneinander hängt. Obiges Programmbeispiel gibt nun folgendes aus: Zuerst den Wert der String-Variablen name, dann ein Leer-Zeichen, dann den Wert des char-Arrays beispiel, dann wieder ein Leerzeichen, anschließend den Wert der String-Variablen bj, wieder ein Leer-Zeichen und letztendlich unsere konvertierte String-Variable zahl. Die Bezeichnung des char-Arrays beispiel ist deswegen so gewählt, da diese Variable als Beispiel dafür dient, daß man char-Arrays nicht in Strings konvertieren muß, sondern gleich so wie sie sind übernehmen kann um sie an einen String anzuhängen. Technisch gesehen ist ein String ja ein char-Array.
cout << ausgabe << endl;

Und hier nun die Ausgabe von name+" "+beispiel+" "+bj+" "+zahl:
Udo ist BJ 1971

string befehl="echo \""+ausgabe+"\"";
system(befehl.c_str());
Wie man im obigen Beispiel bei der Aneinanderkettung von Strings gesehen hat, ist eine Umwandlung von char in string oder umgekehrt nicht von Nöten. Es gibt jedoch seltene Fälle, in denen eine String-Variable in char konvertiert werden muß. Zum Beispiel weil ein Befehl mit der String-Variablen verknüpft werden soll, dieser jedoch nur char zuläßt. Wie im Beispiel des system-Befehls. Mittels des system-Befehls läßt sich die Ausführung des Programms unterbrechen und ein anderes Programm ausführen. Nach Beendigung des fremden Programms, wird das eigene Programm fortgesetzt. Der system-Befehl aktzeptiert jedoch nur eine char-Variable. In solchen Fällen kann man mittels c_str() die String-Variable für den Befehl in eine char konvertieren. Im obigen Beispiel wird somit der Befehl
echo "Udo ist BJ 1971" ausgeführt, was genau wie bei cout die Ausgabe auf der Konsole bewirkt.
Index