C
rettich schrieb:
erstmal vielen dank für die wirklich schnelle bearbeitung meines problems.
@CStoll
die innere schleife:
for(k,j=i;k<=i&&j!=' ';j--,k++)
k=0 :wurde lokal für die ganze main funktion initialisiert da der wert fortlaufend
sein soll und nicht bei jedem schleifen aufruf wieder bei 0 beginnen darf da ja sonst das erste wort in invert jedesmal überschrieben wird oder?
OK, das hatte ich übersehen. Aber wenn das so ist, kannst du es in der Schleifen-Initialisierung auch komplett weglassen.
und j!=' ' :als untere begrenzung des wortes.
es fehlt natürlich die untere begrenzung des ersten wortes,
das hab ich allerdings getestet und macht keinen unterschied
im ergebnis
im übrigen Quelltext verwendest du j als Index in deinem Eingabestring, das solltest du an dieser Stelle auch machen, sprich satz[j]!=' ' . Du vergleichst an der Stelle deinen Index mit dem ASCII-Code des Leerzeichens (auf den meisten Rechnern gleich 32), d.h. wenn das erste Wort der Eingabe nicht zufällig lang genug ist, liest du ziemlich schnell über den Anfang des Strings hinaus in Bereichen, in denen du nichts zu suchen hast. Aus dem selben Grund fehlt noch eine Abbruchbedingung j>=0 in der Schleife - nur für den Fall, daß vor dem ersten Wort kein Leerzeichen steht.
Eine Lösung hätte ich auch noch:
size_t pos, end = 0;
do
{
pos = satz.finde_first_not_of(' ', end);
end = satz.find_first_of(' ', pos);
string word = satz.substr(pos, end==string::npos ? string::npos : end-pos);
reverse(word.begin(),word.end());
cout<<word<<' ';// alternativ auch inverse += word + ' ';
while( end != string::npos );
(ohne Garantie - ich bin etwas aus der Übung)