Problem beim vertauschen von adressen



  • Hallo zusammen
    ich darf mich seit kurzem mit C++ beschäftigen und stehe im mom ein wenig auf dem schlauch

    ich soll in einer aufgabe Kommandozeilen parameter einlesen und dann sortieren
    aber nicht so das ich einfach die "Werte" tausche sondern ich soll die Adressen in argv tauschen

    Sprich
    hilfsAdressenSpeicher = (adresse)argv[0]
    (adresse)argv[0]=(adresse)argv[1]
    (adresse)argv[0]= hilfsAdressenSpeicher

    ich hab jetzt eine ganze weile rumgebastelt und komm irgendwie auf keinen Grünen Zweig

    ich hoffe das mir wer helfen kann

    Gruß Christian



  • Ich denke du hast die Aufgabe falsch verstanden. Adressen kann man so nicht wechseln..



  • das Dumme ist die Aufgabe lautet genau so
    deswegen steh ich ja so auf dem Schlauch

    wie ich die Werte im Array vertausche weiß ich das ist auch kein ding

    leider will unser Prof das "genauso" wie oben beschrieben.

    mein Problem ist halt das ich nichtmal den ansatz einer idee habe



  • Gib mal die exakte Aufgabenstellung.

    Ich denke mal, dass er auf Zeiger hinaus will, aber so, wie das bis jetzt klingt ist das Unsinn.


  • Mod

    Dann ist die Aufgabe unlösbar.

    bist du sicher, dass damit nicht eine Indirektion durch Zeiger gemeint ist und die Werte der Zeiger getauscht werden sollen?



  • Also:

    Erstellen sie ein Programm das Über den KomamdozeilenParameter argv mehrer
    Strings einliest die Strings sollen Mittels der Funktion ...Komsort(...)
    Alphabetisch sortiert werden. Es sollen nicht wie Bisher die Inhalte sondern die
    Pointeradressen in argv getauscht werden.

    Das ist der Aufgabentext den ich bekommen habe. hab ich da was falsch verstanden?

    Gruß Christian



  • das geht ganz einfach:

    #include <cstring>
    #include <functional>
    
    struct string_comparer : std::unary_function<const char*, bool>
    {
    private:
    	typedef std::unary_function<const char*, bool> base;
    
    public:
    	typedef base::argument_type argument_type;
    	typedef base::result_type result_type;
    
    	bool operator() (const char* lhs, const char* rhs) const
    	{
    		int compared = strcmp(lhs, rhs);
    
    		return compared < 0;
    	}
    };
    

    die zugehörige main und damit wir uns zum testen nicht die arbeit machen müssen, in unserer ide die option mit command-line-arguments zu suchen:

    #include <algorithm>
    #include <iostream>
    #include <iterator>
    
    int x_main(int argc, char* argv[])
    {
    	std::sort(argv+1, argv+argc-1, string_comparer());
    
    	std::copy(
    		argv+1,
    		argv+argc,
    		std::ostream_iterator<char*, char>(std::cout, "\r\n")
    	);
    
    	return 0;
    }
    
    int main()
    {
    	char* argv[] = {
    		"__<path>__",
    		"asd",
    		"sdf",
    		"dfg",
    		" ej",
    		"op",
    		"123k",
    		"_-2"
    	};
    
    	int argc = sizeof(argv)/sizeof(*argv);
    
    	return x_main(argc, argv);
    }
    

    bb


Log in to reply