String Probleme



  • Hallo, ich arbeite gerade an dem Buch "Der C++ Programmierer"!
    Bei der Übung 1.11 hab ich leider Probleme den Code zu verstehen.

    #include <iostream>
    using namespace std;
    
    int main() {
    	const string str{ "17462309" }; // aus Aufgabentext
    	long int z = 0L;
    	for (auto zeichen : str) {
    		z *= 10;
    		z += static_cast<int>(zeichen) - static_cast<int>('0');
    	}
    	cout << "z = " << z;
    	int quersumme{};
    	while (z > 0) {
    		quersumme += z % 10;
    		z /= 10;
    	}
    	cout << "   Quersumme = " << quersumme << '\n';
    	system("pause");
    	return 0;
    }
    

    Meine Fragen:

    for (auto zeichen : str) {
    		z *= 10;
    		z += static_cast<int>(zeichen) - static_cast<int>('0');
    	}
    

    1. Ich hab probiert den : durch ein = zu ersetzen, geht nicht. Im Internet hab ich dazu leider nichts gefunden - was macht dieser : und wofür steht dieser Ausdruck?
    2. warum multipliziere ich die Variabel z mit 10?
    3. mit static.cast<int>(zeichen) wandel ich den string zeichen in einen Int-Wert, wofür muss ich davon static_cast<int>('0'); subtrahieren?

    while (z > 0) {
    		quersumme += z % 10;
    		z /= 10;
    	}
    

    1. Auch hier verstehe ich die Berechnungen nicht, wieso verwende ich Modulu 10 etc.?

    Ich habe versucht mir die Fragen selbst zu beantworten, leider bin ich zu keiner Lösung gekommen!

    lg Brail



  • Brail schrieb:

    1. Ich hab probiert den : durch ein = zu ersetzen,

    Warum?

    Brail schrieb:

    geht nicht.

    Das ist nicht wirklich überraschend

    Brail schrieb:

    Im Internet hab ich dazu leider nichts gefunden - was macht dieser : und wofür steht dieser Ausdruck?

    Das ist eine range based for loop - und ich gehe davon aus, dass dies im Buch auch erklärt wird

    Brail schrieb:

    2. warum multipliziere ich die Variabel z mit 10?

    Führe den Algorithmus mit einem Debugger oder auf einem Blatt Papier aus, dann siehst du es.

    Brail schrieb:

    3. mit static.cast<int>(zeichen) wandel ich den string zeichen in einen Int-Wert, wofür muss ich davon static_cast<int>('0'); subtrahieren?

    Welchen Wert hat

    1. static.cast<int>(zeichen)
    2. static_cast<int>('0')
    3. static.cast<int>(zeichen) - static_cast<int>('0')
      ?

    Brail schrieb:

    1. Auch hier verstehe ich die Berechnungen nicht, wieso verwende ich Modulu 10 etc.?

    Führe den Algorithmus mit einem Debugger oder auf einem Blatt Papier aus, dann siehst du es.



  • Hallo manni, danke erstmal für deine Antwort.

    Warum?
    Weil ich mit dem Zeichen nichts anfangen konnte und ich etwas herumprobiert habe.
    Für mich, weitaus mehr überraschend als für dich.
    Range based for loop, hab ich leider noch nie gehört und auch im Buch nicht gefunden. Generell hab ich bis zu der Übung davon auch im Buch nichts gelesen - evtl. ging das an mir vorbei. (Auch auto wurde davor nie erwähnt)

    Welchen Wert hat

    1. static.cast<int>(zeichen)
    2. static_cast<int>('0')
    3. static.cast<int>(zeichen) - static_cast<int>('0')
      ?
      Auch das weiß ich nicht.

    Trotzdem danke, werd schon noch dahinter kommen.



  • Brail schrieb:

    Range based for loop, hab ich leider noch nie gehört und auch im Buch nicht gefunden. Generell hab ich bis zu der Übung davon auch im Buch nichts gelesen - evtl. ging das an mir vorbei. (Auch auto wurde davor nie erwähnt)

    Ich kenne das Buch nicht, sollten darin aber tatsächlich solche Dinge ohne Erklärung vom Himmel fallen, würde ich es nicht weiter benutzen.

    Brail schrieb:

    Welchen Wert hat

    1. static.cast<int>(zeichen)
    2. static_cast<int>('0')
    3. static.cast<int>(zeichen) - static_cast<int>('0')
      ?
      Auch das weiß ich nicht.

    Dass du es nicht spontan weißt, habe ich angenommen. Ändere das Programm so ab, dass es die Werte ausgibt.



  • Brail schrieb:

    Range based for loop, hab ich leider noch nie gehört und auch im Buch nicht gefunden. Generell hab ich bis zu der Übung davon auch im Buch nichts gelesen - evtl. ging das an mir vorbei. (Auch auto wurde davor nie erwähnt)

    Die Ranged based for Loop steht Kapitel 1.9.5 Container und Schleifen und auto in Kapitel 1.9.6 Typermittlung mit auto. Etwas blöd das es nicht vor der Aufgabe kommt, aber es sind tatsächlich die beiden Kapitel direkt nach der Aufgabenstellung...


Anmelden zum Antworten