PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : programm, das eine eingabe rückwärts ausgibt



M00rk
16.06.2009, 22:11
guten abend leute,
hab mir das buch "c++ objektorientiertes programmieren von anfang an" geholt...
soweit alles verständlich, bis auf die 12te aufgabe.
die lautet:
schreiben sie ein programm, das ein wort über die tastatur einliest und es rückwärts wieder anzeigt. benutzen sie eine for-schleife.

die lösung lautet:


#include <iostream>
#include <string>
using namespace std;

int main()
{
char wort[21];
int laenge;
cout << "\nBitte ein Wort eingeben "
"(max. 20 Zeichen)\n>";
cin >> wort;
laenge=strlen(wort);
cout << "\n";
for (int i=laenge-1; i>=0; i--)
cout << wort[i];
cout << "\n";
return 0;
}
bis zur for schleife ist es noch klar, was danach passiert ergibt für mich keinen sinn (i wird deklariert, ist die länge des eingegeben wortes -1. nun wird anscheinend i dekrementiert solange die zahl grösser oder gleich null ist.)

was ausserdem im buch nicht genannt wird, ist dass man eine variable als anzahl der feldelemente verwenden kann.

wo ist mein denkfehler:confused:

mfg mark.

blackberry
16.06.2009, 22:36
was danach passiert ergibt für mich keinen sinn (i wird deklariert, ist die länge des eingegeben wortes -1. nun wird anscheinend i dekrementiert solange die zahl grösser oder gleich null ist.)

Ein Array startet mit dem Element 0.

Sagen wir also du hast folgenden String: "a" (ohne die Anführungszeichen).
Die Länge beträgt 1 Zeichen - und das ist auch was strlen zurückgibt.

Da "a" aber bei 0 liegt (der Array fängt, wie gesagt, bei 0 an) substrahiert man 1.

Selbiges gilt für den String "ab": Länge = 2 Zeichen
Elemente:
[0] = 'a'
[1] = 'b' // <---- strlen(der_string) - 1

Wir können also sagen:
strlen(der_string) - 1 = Index des letzten Zeichens (sofern der String mindestens ein Zeichen enthält)

Also macht die Schleife folgendes:

int i = Index des letzten Elements im char-Array
SOLANGE i GRÖßER GLEICH 0 (das nullte Element gehört mit dazu)
AUSGABE: der_string[i] (das Zeichen mit dem Index i ausgeben)
i = i - 1 (i dekrementieren, dh. den Index auf den voranliegenden char setzen)
/SOLANGE

Freak1936
16.06.2009, 23:36
Gut erklärt, das hab ich jetzt sogar verstanden. Jetzt schnall ich auch langsam wofür Arrays [] eigentlich da sind ...

M00rk
17.06.2009, 14:52
Danke, jetz versteh ichs :D