C++ Strings



  • Hallo,
    ich will mich kurz vostellen, ich bin Christoph und programmiere in C++.
    Ich wollte hier fragen, wie ich in C++ Strings programmieren kann, aber so, dass das Programm alle eingegebenen Wörter überprüft.
    Danke im Vorraus für die Antworten
    Gruß,
    Christoph



  • Hallo Christoph,

    Willkommen im C++-Forum.

    Christoph-C++ schrieb:

    Ich wollte hier fragen, wie ich in C++ Strings programmieren kann, aber so, dass das Programm alle eingegebenen Wörter überprüft.

    es ist ein bisschen unklar, was Du genau damit meinst, bzw. vor hast. Beschreibe einfach, was Dein Programm als Eingabe erwartet und was als Ausgabe erscheinen soll.

    Der String-Typ in C++ ist std::string. Du benötigst dazu ein #include <string> . Kleines Beispiel:

    #include <iostream>
    #include <string>
    
    int main()
    {
        using namespace std;
        cout << "Bitte einzelne Worte eingeben" << endl;
        for( string wort; cin >> wort; )
        {
            cout << "Ihre Eingabe: '" << wort << "'" << endl;
            // mache was mit 'wort'
        }
    }
    

    Gruß
    Werner



  • aber so, dass das Programm alle eingegebenen Wörter überprüft.

    Wie du Wörter einliest, hat dir Werner gezeigt - beachte aber: Wenn du einen std::string mit einem istream wie cin so einliest:

    cin >> wort;
    

    Wird nur bis zum ersten Whitespace ( also Leerzeichen, Tabulator, usw. )gelesen. Genau wie du willst - ein Wort nur - merke es dir aber, wenn du eine Zeile einlesen willst, nutze std::getline .

    Wenn du einen String nun überprüfen willst, dann gibt es da im Allgemeinen viele Funktionen - bspw. könntest du prüfen, ob an der x-ten Stelle im String ein bestimmtes Zeichen steht:

    if( wort.length() > x && wort[x] == 'a' )
        // ...
    

    Oder ob im Wort eine Silbe enthalten ist:

    if( wort.find( "er" ) != std::string::npos ) // alternativ auch den Rückgabewert speichern. Dann hast du auch die Position.
        // ...
    

    Oder ob es, alphabetisch sortiert mit einem anderen String, kleiner ist:

    std::string base("Maus");
    if( wort < base ) // true wenn wort alphabetisch sortiert vor "Maus" kommt
        // ....
    


  • Sone schrieb:

    Oder ob im Wort eine Silbe enthalten ist:

    if( wort.find( "er" ) )
        // ...
    

    Das geht aber anders, füchte ich.



  • Sone schrieb:

    Oder ob es, alphabetisch sortiert mit einem anderen String, kleiner ist:

    std::string base("Maus");
    if( std::lexigraphical_compare( wort.begin(), wort.end(), base.begin(), base.end() ) ) // true wenn wort alphabetisch sortiert vor base kommt
        // ....
    

    In anderen Sprachen klappt sogar

    if(wort<base)
    


  • Und statt std::lexicographical_compare wäre operator< etwas einfacher.



  • volkard schrieb:

    Sone schrieb:

    Oder ob im Wort eine Silbe enthalten ist:

    if( wort.find( "er" ) )
        // ...
    

    Das geht aber anders, fürchte ich.

    Was soll das heißen?
    Edit: Was denn los heute... tja, halt ungetestet.. :kopf->tisch:

    Mixie schrieb:

    Und statt std::lexicographical_compare wäre operator< etwas einfacher.

    Ups, war natürlich ungetestet, daher der Rechtschreib(?)fehler.
    Natürlich geht auch operator< .



  • Sone schrieb:

    volkard schrieb:

    Sone schrieb:

    Oder ob im Wort eine Silbe enthalten ist:

    if( wort.find( "er" ) )
        // ...
    

    Das geht aber anders, fürchte ich.

    Was soll das heißen?

    try this:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        string str = "ganzLangerString";
        string substr = "ganz";
    
        if (str.find(substr))
          cout << "enthalten" << endl;
        else
          cout << "nicht enthalten" << endl; 
    
        return 0;
    }
    


  • Sone schrieb:

    volkard schrieb:

    Sone schrieb:

    Oder ob im Wort eine Silbe enthalten ist:

    if( wort.find( "er" ) )
        // ...
    

    Das geht aber anders, fürchte ich.

    Was soll das heißen?

    std::string::npos



  • Hallo,
    danke für die Schnellen Antworten.
    Ich will das so machen:
    eingeben:

    Der neue Computer

    Das Programm macht daraus dann:
    Der
    neue
    Computer

    und verarbeitet das dann.

    Gruß,
    Christoph



  • Also du willst einen std::string auftrennen und Leerzeichen als Separator verwenden?



  • std::string a, b, c;
    std::cin >> a >> b >> c;
    


  • Genau
    wie mach ich das, dass man nur eine Zeile eingeben muss.


  • Mod

    Christoph-C++ schrieb:

    Genau
    wie mach ich das, dass man nur eine Zeile eingeben muss.

    So wie in den Antworten von Werner Salomon, Sone und Nathan bereits 3x gezeigt.



  • Christoph-C++ schrieb:

    Genau
    wie mach ich das, dass man nur eine Zeile eingeben muss.

    Du musst gar nichts machen. Verwende den Vorschlag von Nathan, oder den von mir. Die Programme machen genau das. Du musst lediglich die Ausgabe etwas anpassen.

    cout << wort << endl;
    

    .. und falls Dir einer was mit getline vorschlägt - vergiss es!



  • Christoph-C++ schrieb:

    ... und verarbeitet das dann.

    was bedeutet das? was soll Dein Programm ausgeben?



  • Werner Salomon schrieb:

    .. und falls Dir einer was mit getline vorschlägt - vergiss es!

    wieso, ist getleine böse?


  • Mod

    c++ n00b schrieb:

    Werner Salomon schrieb:

    .. und falls Dir einer was mit getline vorschlägt - vergiss es!

    wieso, ist getleine böse?

    Nein, aber es ist hier nicht die richtige Antwort.



  • Ich wollte ein Programm schreiben, welches MicroForth heißt.
    Das will ich nach dem Prinzip von einem in BASIC geschriebenen Programm anschließen, das verarbeitet nämlich die Eingabe nach den Strings.
    Das will ich auch machen. Vorteile wären bei C++, dass man das Programm leichter strukturieren kann. In BASIC hat man die Zahlen davor.
    Das Programm verarbeitet die Eingaben und speichert sie.
    Wenn ich eingebe
    : Test 100 1 do i . loop
    Dann Test eingeben:
    1,2,3,4,5,6,7,8,9,10...100
    So soll das Programm die Strings in einen Teilstring einspeichern und dann verarbeiten.



  • Christoph-C++ schrieb:

    So soll das Programm die Strings in einen Teilstring einspeichern und dann verarbeiten.

    Das ist das Problem. Das alte EVA-Prinzip.


Anmelden zum Antworten