"cesar shift" in c

  • sitz grad bei meinem ersten sysprog bsp in c und hab als bsp 1a den tollen
    "cesar shift" bekommen.

    soll mit zwie tabellen, jeweils upper- und lowercase alphabet arbeiten und mit einer
    function() bsearch den jeweiligen character in den beiden tabellen suchen und dann verschlüsseln.

    soll ich die beiden tabellen als character arrays anlegen oder gibt es dafür noch andere bessere datenstrukturen und vielleicht habt ihr auch ahnung ob es irgendwelche hilfreichen
    bibliotheks funktionen für das problem gibt.

    wer net wenn mir wer auf die sprünge helfen könnte!!!
    schon mal danke!!! :distur:

    :wave:

  • Das kommt auf die Angabe an. Wenn die Angabe es nicht verbietet würde ich auch einfach ein char Array verwenden. Normaller Weise reicht es sich auf die kontinuität der ASCII Zeichen 'a'->'z' und 'A'->'Z' zu verlassen, aber soweit ich mich an das Beispiel erinnern kann fanden die bei Sysprog den Fall eines anderen Character-Sets für zu gefährlich. Ob auf solchen PCs ein Prog encoded in ASCII auch zu kompilieren/Lauffähig ist, bleibt da eine andere Frage.
    mfg Oliver

  • Zitat von Zentor

    Das kommt auf die Angabe an. Wenn die Angabe es nicht verbietet würde ich auch einfach ein char Array verwenden. Normaller Weise reicht es sich auf die kontinuität der ASCII Zeichen 'a'->'z' und 'A'->'Z' zu verlassen, aber soweit ich mich an das Beispiel erinnern kann fanden die bei Sysprog den Fall eines anderen Character-Sets für zu gefährlich. Ob auf solchen PCs ein Prog encoded in ASCII auch zu kompilieren/Lauffähig ist, bleibt da eine andere Frage.
    mfg Oliver

    leider steht explizit in der angabe dass man nicht dass ASCII - set verwenden darf!! es liegt ein zeichensatz vor def lücken beinhaltet und es muss auch nicht gegeben sein dass a < b < ....< z usw vorgegeben ist!!

    bin einstweilen so weit dass ich mal 2 arrays mit jeweils groß und kleinbuchstaben deklariere, die ich als suchtabellen verwenden werede.
    argumentbehandlung erfolgt ziemlich genauso wie im buch beschrieben!!

    problem ist jetzt noch immer diese stdlib.h methode bsearch() hat eine irsinnig lange parameterliste und weiß nich nicht genau wie dich das ganze jetzt jwirklich durchführen werde!

    :wave:

  • bsearch ist für sowas nicht wirklich nötig. Nimm lieber strchr. Oder sagt die Angabe explizit, daß du bsearch nehmen sollst?

    Edit: Große Teile meines Posts waren Schwachsinn.
    Edit 2: Hmm, doch nicht. Wenn man nicht von 'a' < ... < 'z' ausgehen darf, kann man keine effiziente Vergleichsfunktion für chars schreiben. D.h. bsearch wäre zwar log n, durch die lineare Vergleichsfunktion wird es aber zu n log n. Einfache lineare Suche mit strchar wäre nur n. Das Requirement, das Programm mit der tollen voll effizienten Funktion bsearch zu schreiben, macht es also weniger effizient als eine naive, übersichtliche Implementierung :hewa: Und dann gibt es noch Leute, die es nicht verstehen, daß ich die Sysprog-Leute hasse...

    Falls du doch bsearch verwenden willst/mußt, hilft es, sich die Sache so aufgeschrieben zu denken:

    Code
    /* definiere vergleichsfunktion als den Typ: Pointer auf Funktion,
       die zwei Pointer auf const void nimmt und int zurückgibt */
    typedef int (*vergleichsfunktion)(const void *, const void *);
    
    
    /* Argumente: gesuchtes Objekt, Anfang des Arrays,
       Anzahl der Elemente, Größe eines Elements, Vergleichsfunktion */
    void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, vergleichsfunktion f);


    Dann mußt du eben eine Funktion int vergleich(const void *, const void *) implementieren und beim Aufruf an bsearch übergeben.

    *plantsch*

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!