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

Inhalt:


Das gleiche in besser: std::string

Mit dem "++" kamen die Klassen in C, so auch die string-Klasse, die uns viel Arbeit abnimmt. Intern arbeitet sie zwar auch mit char-Arrays, aber davon merken wir nicht viel... ;)

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...
 

Beispiel

Das nächste Programm soll:
  • Namen einlesen
  • Schauen ob Alf schreibt...
  • Vokale entfernen
  • Länge ausgeben
  • Namen umdrehen und ausgeben

Quelltext[944B]Download
  1. //stdstr.cpp
  2. #include <iostream>
  3. #include <string>
  4.  
  5. void namen_einlesen(std::string &name);
  6. void vokale_weg(std::string &name);
  7. void drehe_um(std::string &name);
  8. void bist_du_alf(std::string &name);
  9.  
  10. int main()
  11. {
  12. std::string name;
  13.  
  14. namen_einlesen(name);
  15. bist_du_alf(name);
  16. vokale_weg(name);
  17. drehe_um(name);
  18.  
  19. std::cout << name << std::endl;
  20. }
  21.  
  22. void namen_einlesen(std::string &name)
  23. {
  24. do
  25. {
  26. std::cout << "Name: ";
  27. std::getline(std::cin,name);
  28. }while (name.length()==0);
  29. }
  30.  
  31. void vokale_weg(std::string &name)
  32. {
  33. char vokale[]="aeiou";
  34. for (int i=0; i<5; i++)
  35. {
  36. while (name.find(vokale[i])!=std::string::npos)
  37. name.erase(name.find(vokale[i]),1);
  38. }
  39. }
  40.  
  41. void drehe_um(std::string &name)
  42. {
  43. std::string temp;
  44. for (int i=name.length(); i>=0; i--)
  45. {
  46. //Anhängen:
  47. temp+=name[i];
  48. }
  49. name=temp;
  50. }
  51.  
  52. void bist_du_alf(std::string &name)
  53. {
  54. if (name=="alf" || name=="Alf")
  55. name="Katzenfresser!";
  56. }
  57.  
  58.  

 
Beispielprogramm
 

Wie geht's weiter?

Mit der üblichen Zusammenfassung!
Seite:  [1] - Drucken