String



  • Wie kann ich einen String verwenden? 🕶 😕 😋 👍 💡 ➡ ⚠ 🙄 :p 😞



  • Allgemein
    Man unterscheidet zwei Arten von Strings:
    1. C-Strings (char*, wchar_t*)
    2. C++-Strings (std::string, std::wstring)
    Dieser Abschnitt behandelt nur die Klasse std::string der Standardbibliothek, die Ihnen bereits im Abschnitt String-Operatoren kurz begegnet ist.
    In den Codebeispielen wird immer die „Einleitung“
    #include <string>
    vorausgesetzt. Ein string ist kein gewöhnlicher Variablentyp. Er kann aber als solcher benutzt werden, wenn obige Einleitung angegeben wird.
    [Bearbeiten] Finden
    Die überladene Member-Funktion find sucht nach einzelnen Zeichen, C-Strings oder C++-Strings. Das zweite Argument i bezeichnet den Index, ab dem gesucht werden soll, das eventuelle dritte Argument n beschränkt die Suche auf n Zeichen. Als Resultat liefert find die erste gefundene Position oder, falls die Suche fehlschlägt, die spezielle Konstante std::string::npos zurück.
    size_type find(char a, size_type i =0) const;
    size_type find(const string& a, size_type i =0) const;
    size_type find(const char* a, size_type i =0) const;
    size_type find(const char* a, size_type i, size_type n) const;
    Dazu gibt es einige Varianten.
    • rfind() sucht rückwärts,
    • find_first_of() sucht das erste Vorkommen eines Zeichens aus a,
    • find_last_of() dasselbe rückwärts,
    • find_first_not_of() sucht das erste Vorkommen eines Zeichens, das nicht aus a ist,
    • find_last_not_of() dasselbe rückwärts.
    Diese besitzen die gleichen Funktionsprototypen wie find() und sind ebenfalls const.
    Der als Parameter- und Rückgabetyp verwendete size_type ist ein implementationsabhängiger ganzzahliger Datentyp.
    Beispiel:
    std::string a("Enemenemuh");
    std::string b("muh");
    std::string::size_type i = a.find(b); // sucht vorwärts ab Index 0
    // i ist jetzt 7, der Index in a, wo "muh" beginnt
    [Bearbeiten] Anhängen
    Die folgenden Operatoren hängen an den gegebenen String *this ein einzelnes Zeichen, einen C-String oder einen C++-String an. Rückgabewert ist der geänderte String *this.
    string& operator+=(char a);
    string& operator+=(char* a);
    string& operator+=(const string& a);
    Beispiel:
    std::string a("Enemene");
    a += "muh";
    // jetzt ist a == "Enemenemuh"
    Dass sich das Anhängen auch mit dem binären Operator + bewerkstelligen lässt, wissen Sie bereits aus dem Abschnitt String-Operatoren.
    [Bearbeiten] Vergleichen
    Die sechs Vergleichsoperatoren stehen für Strings zur Verfügung. Der Vergleich erfolgt lexikographisch.
    [Bearbeiten] Einfügen
    Die Member-Funktion insert fügt an der angegebenen Position i einen C-String oder C++-String ein.
    string& insert(size_type i, const string& s);
    string& insert(size_type i, const char* s);
    Beispiel:
    std::string s("Shuttle");
    s.insert(1, "pace-S");
    // jetzt ist s == "Space-Shuttle"
    [Bearbeiten] Ersetzen und Löschen
    Die Member-Funktion replace ersetzt ab der Position i die nächsten n Zeichen durch den String s.
    string& replace(size_type i, size_type n, const string& s);
    string& replace(size_type i, size_type n, const char* s);
    Die Member-Funktion erase löscht ab der Position i die nächsten n Zeichen, d.h. ersetzt sie durch einen leeren String. Lässt man das Argument n weg, wird alles ab der Position i gelöscht.
    string& erase(size_type i =0, size_type n =npos);
    Beispiel:
    std::string s("Freibad");
    s.replace(4, 3, "schwimmer");
    // s == "Freischwimmer"
    s.erase(4, 9); // hier wäre s.erase(4) gleichwertig
    // s == "Frei"
    [Bearbeiten] Umwandeln in C-Strings
    Die folgenden Member-Funktionen liefern eine Darstellung des gegebenen Strings als C-String (const char*).
    const char* data() const;
    const char* c_str() const;
    Der Unterschied zwischen den beiden Funktionen besteht darin, daß c_str() die '\0'-Terminierung anhängt, die u.a. von den auf C-Strings operierenden Routinen des Standardheaders cstring erwartet wird.
    Beispiel:
    std::string dir("/home/user/");
    std::string file("test.cpp");
    //...
    std::ifstream in( (dir+file).c_str() );



  • Allgemein
    Man unterscheidet zwei Arten von Strings:
    1. C-Strings (char*, wchar_t*)
    2. C++-Strings (std::string, std::wstring)

    Gibt es nicht nur ein String? 😕



  • Kanst du nicht lesen da stehen 2!!!!!!!!!!!!!!!!!!!!!!!!! 😡



  • Doch ich kann lesen und Ich weiss das es nur einen gibt 😡 :p



  • amser schrieb:

    Allgemein
    Man unterscheidet zwei Arten von Strings:
    1. C-Strings (char*, wchar_t*)
    2. C++-Strings (std::string, std::wstring)

    Gibt es nicht nur ein String? 😕

    Kommt drauf an ob man den C-String als String mitzählt. Theoretisch ist es ein Null-Terminiertes Array aus chars.

    Und der Beitrag gehört in's C++-Forum...



  • EOutOfResources schrieb:

    Kommt drauf an ob man den C-String als String mitzählt. Theoretisch ist es ein Null-Terminiertes Array aus chars.

    Und der Beitrag gehört in's C++-Forum...

    Da siehst du es ! Es kommt auf die Ansicht an möglich sind 2! 🙄 :p



  • Ok... hab mich geirrt 😮

    Man lernt nie aus 👍



  • Delete schrieb:

    EOutOfResources schrieb:

    Kommt drauf an ob man den C-String als String mitzählt. Theoretisch ist es ein Null-Terminiertes Array aus chars.

    Und der Beitrag gehört in's C++-Forum...

    Da siehst du es ! Es kommt auf die Ansicht an möglich sind 2! 🙄 :p

    Blödsinn!
    Wenn Du so kommst, was ist dann mit Unicode-Strings? Und nullterminierten C-Arrays aus wchar's?

    Wenn es auf die Ansicht ankommt, dann gibt es sicherlich eine ganze Menge mehr Strings!



  • Fassen wir zusammen: Es gibt ein Konzept "String" (aka Zeichenkette) und es gibt verschiedene Möglichkeiten, dieses Konzept umzusetzen. In Standard-C++ gibt es schon zwei Ansätze (C-Strings alias char[] und C++-Strings alias std::basic_string<> ), je nach System kannst du noch weitere Umsetzungen zur Verfügung haben (z.B. CString aus der MFC).



  • CStoll schrieb:

    CString aus der MFC

    Was ist daran anders? Also der AnsiString aus VCL ist eine Reimplementierung von std::string .



  • Die CString hat auf jeden Fall ein komplett anderes Interface als std::basic_string<>. Und ich könnte mir vorstellen, daß auch andere Implementationen unabhängig von der STL entstanden sind.



  • EOutOfResources schrieb:

    CStoll schrieb:

    CString aus der MFC

    Was ist daran anders?

    Vielleicht schaust Du Dir einfach mal die Methoden an, die CString zur Verfügung stellt:
    http://msdn.microsoft.com/en-us/library/abzc9989.aspx



  • EOutOfResources schrieb:

    CStoll schrieb:

    CString aus der MFC

    Was ist daran anders? Also der AnsiString aus VCL ist eine Reimplementierung von std::string .

    Viel. Guck's dir an.



  • Du benutzt einen String folgender maßen:

    #include "stdafx.h"
    #include "iostream"
    #include "string"
    using namespace std;
    
    int main()
    {
    string Name = "Stefan";
    cout << Name;
    getchar();
    }
    


  • rocker4156 schrieb:

    #include "stdafx.h"
    #include "iostream"
    #include "string"
    using namespace std;
    
    int main()
    {
    string Name = "Stefan";
    cout << Name;
    getchar();
    }
    

    Nein! string und iotream sind nicht lokal! Und wieso vorkompilierter Header? Und "using namespace std;" ist hässlich!

    #include <string>
    #include <iotream>
    int main()
    {
      std::string MeinString("Foo");
      std::cout << MeinString;
      std::cin.get();
    }
    


  • @Delete: musstest du dich deswegen gleich so aufregen..?

    EOutOfResources schrieb:

    Und "using namespace std;" ist hässlich!

    Das ist eine Ansichtssache 🙂 Ich find es schöner ohne std::. Außerdem bin ich zu faul, das jedes Mal zu schreiben und vor allem, wenn der Code aus 1000 Zeilen oder mehr besteht.



  • Dann kann man auch unsing std::cout/whatever benutzen, anstatt den gesammten namespace zu includen. Verringert die chance von namespace-pollution. Aber ... alles in allem ist das ziemlich wayne tbh.

    Irgendwie sieht der OP ziemlich nach trolling aus ...



  • Habt ihr mal geschaut, wie alt der Thread ist?


Anmelden zum Antworten