String als Variablennamen verwenden? Geht das?



  • Hallo alle zusammen,

    wie kann ich folgendes erreichen?

    Sagen wir mal ich habe einen Zeiger zeiger auf folgende Struktur:

    struct user {
             char name[30];
             char strasse[50];
    }
    

    Ich habe mir jetzt eine Funktion zum sortieren einer Liste von diesen Strukturen geschrieben und möchte dieser Funktion auch gerne das Kriterium zum sortieren übergeben. Also sortieren nach Name, Straße und den anderen Sachen die noch dazu gehören.

    Mir fällt da leider nur ein dass ich je nach Entscheidung eine if-Abfrage mache und für jeden Fall den Sortieralgorithmus mit den geänderten Variablen ausführe. Aber da müsste ich ja den Quelltext 4 mal kopieren. Das will ich eigentlich nicht.

    Wie kann ich es anstellen, dass ich das kriterium übergebe und ich begreiflich mache: zeiger->kriterium zu ändern?

    Geht das irgendwie?

    Danke und mfg

    André



  • hier haste 'ne demo, wie man sowas machen könnte...
    (geht aber nur so einfach, wenn deine ganze struct aus lauter char-arrays besteht)

    #include <stdio.h>
    
    struct user 
    {
        char name[30];
        char strasse[50];
    };
    
    // simuliert die sortierung (sortiert aber nicht)
    // ----------------------------------------------
    // *array zeigt auf alle user
    // count ist die anzahl der elemente im array
    // criteria ist offset auf den string nach dem sortiert werden soll
    void sort_it (struct user *array, unsigned int count, unsigned long criteria)
    {
        unsigned int s;
        printf ("kriterium: %d\n", criteria);
        for (s=0; s<count; s++)
            // adresse auf gesuchten string berechnen und ausgeben
            printf ("%s\n", (char*)&array[s]+criteria); 
        printf ("-----\n");
    }
    
    int main()
    {
        // array von usern (zu demozwecken)
        struct user us[] = 
        {
            {"lala", "doof"},
            {"peter", "paul"},
            {"tod", "teufel"},
        };
    
        // sortiere nach namen
        sort_it (us, sizeof(us)/sizeof(struct user), 
                 (unsigned long)((struct user *)0)->name);
    
        // sortiere nach strasse
        sort_it (us, sizeof(us)/sizeof(struct user), 
                 (unsigned long)((struct user *)0)->strasse);
    
    }
    

    :xmas2:



  • Hallo,

    danke für deine Hilfe. Sieht jedenfalls interessant aus, auch wenn ich eine Weile gebraucht habe um zu verstehen was gemacht wurde.

    Leider habe ich nicht nur strings in meiner Struktur.

    Ciao

    André



  • taralos schrieb:

    Leider habe ich nicht nur strings in meiner Struktur.

    naja, dann brauchste mindestens für die unterschiedlichen typen angepasste sortfunctions...


Anmelden zum Antworten