Brutaler Anfänger bräuchte Hilfe



  • Mit char wort[10]; hast du ein Wort, das 9 Zeichen lang sein kann.

    Mit char buch[10][100]; hast du 10 Wörter, die 99 Zeichen lang sein können.
    und buch[2] wäre dann das dritte Wort.

    Das ganze ist aber sehr statisch.



  • Mach es am besten über eine verkettete Liste (wenn du magst auch doppelt verkettet). So machst du dir das einfügen und löschen recht einfach. Und jedes Listenelement speichert dann den entsprechenden Wörterbucheintrag (Stichwort struct).



  • uje das geht schon stark über mein wissen hinaus.. werd mich nochmal gut einlesen und probieren



  • flo20 schrieb:

    aber ich weiss garnicht wie die funktionieren ich hab schon aus vielen vielen büchern und seiten gelesen wie sie allgemein funktionieren aber nicht wie ich sie in sonem fall anwenden kann ??

    Nur durch lesen lernt man C nicht. Du musst mal Programme schreiben.

    Hast du noch kein HalloWelt.c geschrieben?
    Oder "Gib deinen Namen ein:" -> "Hallo flo20"?

    Dann wird es mal Zeit.

    Geholfen wird dir hier schon, nur die Hausaufgaben werden hier nicht gemacht.



  • ja klar hab schon eingige dinge programmiert natürlich selbst aber bin leider noch nicht soweit mit struct und pointer ...



  • Für 10 Wörter reicht es doch erstmal wenn du das statisch (ohne Listen machst).

    Und da kannst du statt Pointern mit Indizes arbeiten.

    Wie gesagt schreib erstmal was.



  • Mache es nicht mit verketteten Listen, nimm für den Anfang einen eigenen Typ für das Stringhandling. Ein String ist in C ein Array mit Elementtyp char und endendem '\0' char (für Endeerkennung). Dafür gibt es dann eine Reihe von Standardfunktionen, welche auch oft 'str' im Namen enthalten.

    #define MAX_LAENGE_WORT 100
    typedef char Wort[MAX_LAENGE_WORT];
    ...
    Wort worte[100]; /* hier sind 100 Worte mit je max. 99 Buchstaben definiert */
    strcpy(worte[0],"erstes Wort"); /* Befüllung mit char Elementen */
    strcpy(worte[1],"Wort2");
    ...
    /* Testausgabe auf Konsole */
    puts(worte[1]);
    puts(worte[0]);
    


  • wow find ich toll hab den beitrag erst jetzt gesehen und hab es fast genauso zusammengebracht. vielen dank im nachhinein. So, jetzt bin ich gerade dabei auch auf Befehl Wörter wieder herauszulöschen. Ich hab schon verschiedenste Funktionen ausprobiert nur komme ich nicht wirklich auf mein gewünschtes ziel, oder muss ich hier anderwertig vorgehen um es so dynamisch zu gestalten ? (tut mir leid, dass ich mir so viel helfen lassen muss ich bin wirklich daran so selbstständig wie nur möglich zu arbeiten!!)
    ich danke im voraus und hoffe, dass alle gut gerutscht sind 🙂



  • Auch das ist sehr einfach mit Arrays, du schiebst alle "restlichen" Arrayeinträge nach deinem zu löschenden Eintrag um eine Position vor, z.B. mit der Standardfunktion memmove, und dies am einfachsten mit einer Funktion:

    #define MAX_ARRAY_LAENGE 100
    #define MAX_LAENGE_WORT 100
    typedef char Wort[MAX_LAENGE_WORT];
    size_t laenge;
    Wort worte[MAX_ARRAY_LAENGE];
    
    void addiereElement(char *s)
    {
      memcpy(&worte[laenge++],s,MAX_LAENGE_WORT);
    }
    
    void loescheElementBeiPosition(int i)
    {
      memmove(&worte[i],&worte[i+1],(--laenge-i)*MAX_LAENGE_WORT);
    }
    
    /* hier weitere gewünschte Funktionalitäten */
    void loescheElement(char *s) {}
    void loescheAlles() {}
    void sortiere() {}
    
    int main()
    {
      int i;
    
      addiereElement("erstes Wort");
      addiereElement("Wort2");
      addiereElement("wort_03");
      for(i=0;i<laenge;puts(worte[i++]));
    
      loescheElementBeiPosition(1);
      for(i=0;i<laenge;puts(worte[i++]));
    
      return 0;
    }
    

    Erstmal alles ohne dynamische Speicherverwaltung, ohne Fehlerbehandlung, mit globalen Variablen, professionell macht man das natürlich nicht so, wirklich nur ein einfacher Einstieg in (String)Array-Bearbeitung.



  • super danke fürs erste werd mir das mal durch den kopf gehen lassen


Anmelden zum Antworten