struct elemente in funktionen



  • @Wade1234 jap ist mir auch beim debuggen aufgefallen 😳 außerdem hatte ich den falschen rückgabewert. Hab das jetzt aur return tmpstr gesetzt und es klappt. Bin gerade bei der zweiten funktion. Wenn ich die auch schaffe, bin ich echt glücklich 😃



  • @Wade1234 ich komm einfach nicht voran... ich starre diesen code jetzt stunden an und sehe zwar den fehler, aber hab keine ahung was ich machen soll... die zweite funktion (zaehle_wort) funktioniert soweit, aber das Programm stürtzt beim zweiten aufruf der ersten funktion immer an der stelle pos++ ab.. außerdem nimmt es immer wieder die gesamte zeile und somit bringt es nichts....

      string naechstes_wort(string zeile, int& pos) // zeile ="mona hat" pos=0 (referenz)
    
    {
    string tmpstr = "";
    
    for (int i = 0; zeile[i] >= 'a' && zeile[i] <= 'z'; i++, pos++) //isoliert jedes Wort
    {
    	if (zeile.at(i) != ' ')
    	{
    		tmpstr += zeile[pos];
    		zeile[pos] == tmpstr[pos];
    								//problem entsteht hier mit dem arraybereich, nachdem beide funktionen einmal durchgeführt wurden und eingabe[k] nochmal hier rein springt.
    	}									//außerdem muss izeile[i] irgendwie die bereits durchlaufenden wörter der zeile überspringen.
    
    	if (zeile.at(pos) == ' ')
    	{
    		i = zeile[i];
    		break;
    	}
    
    }return tmpstr; //ab hier wird das erste wort an die main überwiesen
    

    }



  • Du kommst irgendwie mit den 2 Variablen pos und i durcheinander. Warum hast du da 2 Variablen?

    string naechstes_wort(const string &zeile, int& pos) {
        // Überspringe Spaces am Anfang
        while (pos < zeile.size() && isspace(zeile[pos])) ++pos;
    
        string result;
        // nicht-whitespacezeichen anhängen
        while (pos < zeile.size() && !isspace(zeile[pos]))
            result += zeile[pos++];
        return result;
    }
    

    Wenn du jetzt statt Leerzeichen nur a-z haben willst, musst du das isspace durch eine eigene Funktion ersetzen, die true für Nicht-Wortzeichen zurückgibt und sonst false.



  • @wob ja lustigerweise ist mir das auf dem Heimweg auch aufgefallen. Ich hab nun nur noch pos als Zählervariable. Aber es stürtzt immer noch ab der 10 Zeile ab. Selber FehlerCode
    und isspace darf ich nicht verwenden

       string naechstes_wort(string zeile, int& pos)
     {
    string tmpstr = "";
    
    for (; zeile[pos] >= 'a' && zeile[pos] <= 'z'; ) //isoliert jedes Wort
    {
    	if (zeile.at(pos) != ' ')
    	{
    		tmpstr += zeile[pos];
    		zeile[pos] == tmpstr[pos]; // programm stürtzt hier ab dem zweiten funktionsaufruf ab
    		//zeile += zeile[pos];
    	}								
    
    
    	if (zeile.at(pos) == ' ')
    	{
    		pos = zeile[pos];
    		break;
    	}
    	pos++;
    }
    
    return tmpstr;
    //return zeile; 
    

    }



  • Du checkst in deiner for-Schleife (ohne Start und Inkrement, also eigentlich eine while-Schleife in for-Syntax), dass zeile[pos] ein Buchstabe a-z ist. Warum dann das if in Zeile 7? Das ist somit immer true und dein if in Zeile 15 ist niemals true.
    Zeile 10 ist ein Fehler. Was soll die überhaupt tun? Erstens ist == ein Vergleich und du benutzt das Ergebnis nicht. Und wenn pos beim Funktionsaufruf > 0 ist, dann hat tempstr doch gar nicht so viele Zeichen. Kurzum: ich verstehe deine Logik nicht.

    Außerdem: Warum hast du Checks auf das Leerzeichen und auf a-z? Was soll bei anderen Zeichen, zum Beispiel bei Großbuchstaben, Punkten, Kommas, Umlauten etc. passieren? Daher würde ich lieber in einer Funktion festlegen, welche Zeichen Trennzeichen sind und alle anderen als Wortzeichen ansehen (das habe ich mit isspace gemacht, aber schreib dir doch deine eigene Funktion dafür, wenn du isspace nicht verwenden darfst - vielleicht möchtest du auch lieber !std::isalpha bzw. deine eigene Variante davon verwenden)



  • und was soll Zeile 17 tun?



  • @mmm_1482_ sagte in struct elemente in funktionen:

    und isspace darf ich nicht verwenden

    mach isspace() doch einfach selbst:
    https://github.com/GaloisInc/minlibc/blob/master/isspace.c


Anmelden zum Antworten