Wörtervergleich



  • Hey Leute habe folgenden Quellcode:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    bool str_verg(string &str_1, vector<string> &vec_str)
    {
        for(vector<string>::iterator iter = vec_str.begin();
                              iter != vec_str.end(); iter++)
        {
            if(str_1 == *iter)
                return true;
            else
                return false;
        }
    }
    
    int main()
    {
        cout << "Bitte Wörter eingeben:" << endl;
        string word;
        vector<string> vec_word;
        while(word != "exit")
        {
            cin >> word;
            if(str_verg(word, vec_word) != true)
                vec_word.push_back(word);
            else
                cout << "! Word schon genannt!" << endl;
        }
    
        return 0;
    
    }
    

    Das Programm soll Wörter einlesen und wenn eins schonmal genannt wurde, soll "Wort wurde schon geannnt" ausgegeben werden. Nur funktioniert dies nur einmal, danach erkennt es nicht mehr ob ein Wort eingegeben wurde.
    Woran kann das liegen??

    GhostfaceChilla



  • Überleg dir mal wie oft deine Schleife durchlaufen wird.



  • Solange bis

    "exit"
    

    eingegeben wird oder??

    GhostfaceChilla



  • GhostfaceChilla schrieb:

    Solange bis

    "exit"
    

    eingegeben wird oder??

    GhostfaceChilla

    ich meine die in str_verg



  • #include <iostream>
    #include <vector>
    
    using namespace std;
    
    bool str_verg(string &str_1, vector<string> &vec_str)
    {
        for(vector<string>::iterator iter = vec_str.begin();
                              iter != vec_str.end(); iter++)
        {
            if(str_1 == *iter)
                return true;
            else
                continue;
        }
    }
    
    int main()
    {
        cout << "Bitte Wörter eingeben:" << endl;
        string word;
        vector<string> vec_word;
        while(word != "exit")
        {
            cin >> word;
            if(str_verg(word, vec_word) != true)
                vec_word.push_back(word);
            else
                cout << "! Word schon genannt!" << endl;
        }
    
        return 0;
    
    }
    

    Haha danke, habs geändert 😃

    -GhostfaceChilla-



  • Jetzt hast du es leider verschlimmbessert. Erstens ist der Else-Zweig rudundant und zweitens gibst du nie false zurück. Setz dich nochmal in Ruhe hin und überlege genau (!), wann du false zurückgeben musst. Mach die am besten Beispiele auf einem Blatt Papier und überlege was passieren muss.

    Übrigens lohnt es sich mal sich mit dem Debugger deiner IDE vertraut zu machen.


Anmelden zum Antworten