Anzahl der Stringelemente eines Arrays ohne sizeof()



  • hi,
    ich hänge mal wieder an einer Aufgabe und komme nicht weiter. Die Aufgabe an sich geht eigentlich noch weiter, aber ich übe mich gerade darin, erst einmal die stringlemente eines Arrays zu zählen. Der Code an sich compiliert, aber die Werte bleiben immer auf 0.
    Beim debuggen läuft auch alles so, wie es sollte, aber die Zeile 21 ( wo dann der Wert an den integer array übergeben werden sollte) wird einfach übersprungen.
    Dementpsrechen wird nur der Defaultwert übergeben. Ich hab es eben auch nochmal getestet, indem ich dem int array explizit initialisiert habe und in der ausgabe auch genau diese Zahlen angezeigt werden.
    Warum wir die Zeile übersprungen?

    Und noch eine Frag:
    wenn ich die Länge eines string arrays an eine andere variable übergeben möchte, geht
    int laenge_str = str.length(); nicht. Es wird sogar beim ersten eintippen automatisch in :
    int laenge_str= str -> length(); gesetzt.
    Warum funktioniert das normale .length() hier nicht?

    int main()
    {

    const int text = 2;
    string str[text] = { "" };
    int zaehle_str_werte[text] = { 0 };
    int str_laenge = 0;
    
    for (int i = 0; i < text; i++)
    {
    	cout << "Bitte geben Sie den String ein: " << endl;
    	getline(cin, str[i]);
    }
    
    for (int arr_pos = zaehle_str_werte[0]; arr_pos < text; arr_pos++)
    {
    	
    	for (int str_pos = 0; str_pos < str->length(); )
    	{
    		str_laenge ++;
    		str_pos++;
    		
    	}
    	zaehle_str_werte[arr_pos] == str_laenge; // speichter nicht den wert an der stelle [arr_pos] mit dem endgültigen wert von str_laenge
    	str_laenge = 0;
    }
    // ausgabe der stringwert-anzahl
    for (int i = 0; i < text; i++)
    {
    	cout << zaehle_str_werte[i] << endl;
    }
    
    system("PAUSE");
    return 0;
    

    }



  • In Zeile 21 steht ein Vergleichsausdruck (mit ==), aber dein Text liest sich so, als wolltest du eigentlich eine Zuweisung (mit =). Ist es das schon? 🤔

    Zu dem Rest: Arraytypen sind keine Klassen und haben daher keine Memberfunktionen, die man aufrufen könnte. Deine IDE ersetzt .length() direkt durch ->length(), weil sie glaubt, dass du dich für die Länge des Strings interessierst, der an der ersten Stelle in dem Array steht, und nur zu faul oder zu blöd bist, -> einzutippen. Ich persönlich finde das beleidigend und schalte solche Funktionen daher grundsätzlich ab.



  • Schau mal genau die Zeile an (oder aktiviere und beachte die Warnungen des Compilers).

    Und str ist ein Array, also mußt du str[x].length() benutzen.
    Willst du überhaupt ein Array haben? Und text ist kein guter Name (um es positiv auszudrücken) für die Anzahl.



  • @Bashar ah hast recht mit dem zuweisungoperator klappt zumindest die anzahl des ersten textes. Aber leider übernimmt er die anzahl auch für den zweiten text XD

    und zu dem zweiten Thema.. gibt es denn noch eine andere mölichkeit außer ->length() oder sizeof(), die ich in die Kopfzeile der Schleife setzen könnte?



  • @Th69
    wie würdest du es bezeichnen?
    es sollen 4 texte eingegeben werden.. mir ist nichts besseres eingefallen 😃

    ja das mit dem operator war falsch.. nur verstehe ich noch nicht genau, warum der wert auch für den zweiten text übernommen wird. eigentlich setze ich in zweile 22 str_laenge = 0; dann müsste er im zweiten schleifendurchgang der äußeren schleife wieder auf 0 sein und hochzählen, oder nicht?



  • MaxTexts oder AnzahlTexte o.ä.

    Hast du denn die Schleifenbedingung in Zeile 15 entsprechend meiner Aussage angepaßt?

    Edit: str->length() entspricht str[0].length(), darum wird bisher immer die Länge des ersten Texts berechnet...



  • @Th69 bzw hab bemerkt, dass es nicht umd str_laenge geht, sondern umd die bedingung in for ( <str-> length())
    die länge wird auf den wert des ersten textes festgehalten



  • Dieser Beitrag wurde gelöscht!


  • Du iterierst doch in der äußeren Schleife über die Array-Länge, also nutze diese Schleifenvariable als Index.

    PS: Warum initialisiert du diese äußere Schleife mit int arr_pos = zaehle_str_werte[0] und nicht einfach int arr_pos = 0???



  • @Th69 den letzten abschnitt hab ich überlesen XD
    ja hab das jetzt so gemacht:
    aber es kommt noch immer nur die anzahl des ersten textes

    	for (int str_pos = 0; str_pos < str[0].length() ; ) /*str->length()*/


  • @Th69 ah ja das klappt! also mit arr_pos
    ich muss das ganze jetzt erstmal gedanklich durchgehen, um zu verstehen, weshalb arr_pos
    😃 vielen dank 🙂

    ps:geht nur darum, dass ich es gedanklich besser einordnen kann 🙂



  • @Th69 oh man ja natürlich XD sowas sehe ich auch erst wenn man es mir sagt.. dann ist alles ganz logisch 😃
    ich hab immer diese denkfehler



  • 👍

    Logisches Programmieren lernt man eben leider nicht von jetzt auf gleich, sondern dauert seine Zeit.
    Es freut mich aber, daß du so eifrig bist, auch wenn es wohl nicht deine Profession werden wird.



  • @Th69 ich muss sagen es ist echt schwer und es nervt manchmal, aber dieses gefühl, wenn es klappt ist echt unfassbar 😃
    irgendwo macht es mir spaß, aber nee damit werde ich meine brötchen nicht verdienen 😃 ich muss einfach eine ungefähre ahung vom coden haben, damit ich mit später mit informatikern arbeiten kann und ungefähr weiß, was der code macht.
    Aber je mehr ich programmiere, desto mehr kann ich mir vorstellen, auch noch nach der prüfung hobbymäßig weiterzumachen.



  • @mmm_1482_ sagte in Anzahl der Stringelemente eines Arrays ohne sizeof():

       const int text = 2;
    
    const double byteCount = 3.1415;
    const std::string color = "C:\\UserData";
    const size_t path = sizeof(void*);
    

    Merkste was?
    😉


Anmelden zum Antworten