W
chris35039 schrieb:
Danke für die Antworten, das DIng ist leider nur, das ich nur in der allInseration Funktion was schreiben darf.
Unser Prof hat uns kurz vor den ganzen Klausuren ne Hausarbeit reingeknallt bei der man die ohren anlegt.
So wie ich es gepostet hatte läuft es ja, aber leider werde ich keine Punkte darauf bekommen weil es eben nicht Rekursiv ist.
Hallo Chris,
jetzt habe ich Deine Aufgabe erst richtig verstanden. Die Signatur von
std::list< std::string > allInsertions( char x, std::string s );
ist also eine Vorgabe. 'Hausarbeit' lösen sollten wir ja nicht; aber weil heute Freitag ist und ich frei habe
#include <algorithm> // swap, copy
#include <iostream>
#include <iterator> // ostream_iterator
#include <list>
#include <string>
std::list< std::string > allInsertions( char x, std::string s )
{
using namespace std;
string::size_type i = s.find( x );
if( i == string::npos )
{
s = x + s; // nicht gefunden, dann vorn einfügen
i = 0; // Pos von 'x' ist vorn
}
list< string > l( 1, s );
if( ++i < s.size() )
{
swap( s[i-1], s[i] );
l.splice( l.end(), allInsertions( x, s ) );
}
return l;
}
int main()
{
using namespace std;
list< string > l = allInsertions( 'X', "Rekursion" );
copy( l.begin(), l.end(), ostream_iterator< string >( cout << "Die Liste:\n", "\n" ) );
cout << endl;
return 0;
}
Grüße an Deinen Prof
Werner