[Home]
für Einsteiger!
Seite:  [1] - Drucken

Inhalt:


Durchatmen - Zusammenfassung des dritten Teils


[drucken]

C++ Texte

  • Texte werden im Computer durch Zahlen dargestellt. Dabei handelt es sich meist um Arrays aus Zeichen ("char")!
  • Man kann Zeichen direkt einer Variable zuweisen, oder über den ASCII-Code!
  • Es gibt 128 weitere Zeichen, die sich aber von System zu System unterscheiden. Deshalb gibt es Unicode!
  • Zum einfachen Umgang mit Texten gibt es außerdem "std::string", womit sich Texte und Wörter einfach darstellen, bearbeiten und einlesen lassen!

char-Arrays

Ein char-Array wird genauso angelegt, wie auch ein anderes Array. Beachte, das die Längenangabe wegfallen kann, der Compiler kümmert sich dann darum:
Quelltext
  1. char str1[5]="Test";
  2. char str2[]="ohne Laengenangabe";
  3. char str3[]={'i','n',' ','C','!','\0'};
  4.  

Zeichenketten werden in C(++) mit einem Nullbyte ("\0") abgeschlossen! Dies ist nötig, da die Länge des Strings sonst unbekannt wäre, und man fremden Speicher lesen/schreiben würde, was zu Programmabstürzen führen kann!

Funktionen, die C-strings erwarten, orientieren sich am Nullbyte! Man sollte also immer genug Platz haben! (Besser zu viel!)
 

char-Arrays bearbeiten

Es gibt ein paar Funktionen im C++-Standard, die C-strings bearbeiten:
int strcmp(str1,str2)Strings "str1" und "str2" vergleichen und lexikographische Differenz (z.B.: alphabetisch) zurückgeben: Bei einer Rückgabe von "0" sind beide strings identisch!!!
strcpy(str1,str2)String "str2" in "str1" kopieren

atoi, itoa und atof - Konvertieren

Um eine Eingabe im ASCII-Format in eine Zahl zu verwandeln sind Casts unbrauchbar. Deshalb gibt es noch die 3 oben genannten Funktionen, welche diese Aufgabe übernehmen:
#include <cstdlib>
int atoi(str)ASCII to int
float atof(str)ASCII to float
itoa(int, str, int)int to ASCII:
Parameter 1 wird in Parameter 2 gespeichert,
der dritte Parameter gibt das Zahlensystem an, normalerweise "10" für dezimal...

Dabei werden "unpassende" Zeichen ignoriert, "atof("3.50 Euro")" gibt also "3.5" zurück!
 

std::string

Wann immer du kannst, solltest du std::strings den C-strings vorziehen!

std::string's anlegen und füllen

Um std::string benutzen zu können, muss man zuerst "<string>" einbinden. Danach kann man ganz normal damit arbeiten, ohne sich um Größen zu kümmern:
Quelltext
  1. #include <string>
  2.  
  3. std::string test;
  4. std::string test2="Wackelpudding mit Sahne";
  5.  

 

std::string's einlesen

Das Einlesen funktioniert ebenfalls ganz einfach:
Quelltext
  1. std::string eingabe;
  2. std::getline(std::cin, eingabe);
  3.  

 

std::string's ausgeben

Die Ausgabe erfolgt am besten über "std::cout":
Quelltext
  1. std::string ausgabe="Hund, Katze, Maus!";
  2. std::cout << ausgabe;
  3.  

 

std::string und C-Arrays

Hier kommt uns der interne Aufbau eines std::string zugute:
Quelltext
  1. //Von C-String nach std::string:
  2. char c_test[20]="Test!";
  3. std::string test= c_test;
  4.  
  5. //Eine Funktion mit einem C-Array stopfen:
  6. funktion_braucht_cstring(test.c_str());
  7.  

 

Operationen

Quelltext
  1. //Addition:
  2. std::string str1="Gold";
  3. std::string str2="esel!";
  4. std::string str3=str1+str2;
  5. //str3: "Goldesel!"
  6.  
  7. //Multiplikation:
  8. //Zwanzig mal "Raute-Sternchen-Drei" speichern:
  9. std::string multikulti (20, "#*3");
  10.  
  11. //Vergleichen:
  12. if (str1==str2) {/*...*/}
  13. if (str1>str2) {/*...*/}
  14. if (str1<str2) {/*...*/}
  15. /*...*/
  16.  
  17. //Länge ermitteln:
  18. int laenge=str3.length();
  19.  
  20. //Zeichen(kette) einfügen:
  21. std::string alta="Das ist ein Test!";
  22. alta.insert(12,"weiterer "); //Parameter: Position, String
  23. //Nun: "Das ist ein weiterer Test!"
  24.  
  25. //Zeichen(kette) löschen:
  26. alta.erase(12,9);
  27. //=>"Das ist ein Test!"
  28.  
  29. //Zeichen ersetzen:
  30. std::replace(str1.begin(), str.end(), 'o', 'e');
  31.  

 

Suchen...

Um etwas in einem String zu suchen, gibt es viele Möglichkeiten:
find() vorwärts suchen
find_first_of() Findet die erste Position jedes angegebenen Zeichens
find_last_of() Findet die letzte Position jedes angegebenen Zeichens
find_first_not_of() Findet die Position des ersten nicht angegebenen Zeichens
find_last_not_of() Findet die Position des letzten nicht angegebenen Zeichens
rfind() Rückwärts suchen

 
Ist das Ergebnis dieser Funktion "std::string::npos", enthält der string den Suchbegriff nicht, andernfalls wird ein Integer mit der Position zurückgegeben...

[drucken]

Ein paar Beispielprogramme?

Ich glaube die Beispiele aus den vorangegangenen Teilen sollten reichen...!?

Ein paar "Aufgaben" (nicht viel)

Wenn du die Aufgaben lösen kannst, solltest du dieses Kapitel verstanden haben... ;)
  1. Lies einen Satz ein, entferne alle Konsonanten ("nicht-Vokale") und gib ihn einmal richtig und einmal umgedreht aus. Benutze wenn möglich eine eigene Funktion, um die Konsonanten zu entfernen!
  2. Lies den Namen des Benutzers ein, und ersetze alle "e" durch "ei", du kannst dies auch einmal mit char-Arrays machen... (schwerer)
  3. Lies einen String ein, und gebe nur die Buchstaben ungerader Positionen aus!

Wie geht's weiter?

Jetzt kommt wieder ein Fun-Kapitel! Jede Menge tolle Sachen machen! ;)
Seite:  [1] - Drucken