Wörter zeilenweise einlesen/sortieren

cwriter

Erfahrenes Mitglied
also im Prinzip so aber kann man dies nicht kürzer machen ?
while...
Momentan liest du maximal 2 Wörter ein, und erst noch an dieselbe Stelle.

char array[250000] ist falsch. Wennschon, dann müsste es char* array[250000] sein. Ich bin aber ziemlich sicher, dass das nicht funktionieren wird. 250000 * 8 = 2000000 ~ 2MB => Ziemlich nah an der Stack-Obergrenze. So etwas gehört auf den Heap (malloc, calloc).

Du bist noch sehr weit von meiner ursprünglich gestellten Aufgabe entfernt. Muss ich ein Ultimatum stellen, dass ich nicht mehr helfe, bis du diesen Minimalteil hinbekommen hast oder kannst du dich zusammenreissen und wenigstens einmal die Vorgaben ohne erzwungene Regeln erfüllen?

cwriter
 

BasicC

Erfahrenes Mitglied
C:
int main () {

    FILE *fp;

    int einlesen[60];

    int i;

  

        while (i<60)

          

        {

          

            FILE *f=fopen("/Users/********/Desktop/TI SS18/dict-american.txt","r");

            fscanf("/Users/*******/Desktop/TI SS18/dict-american.txt", "%s", einlesen[1]);

            printf("\n%s",einlesen[1]);

            i++;

            fclose(f);

        }

      

  

    return(0);

  

}

Bin ich jetzt etwas näher dran !?

Es funktioniert zwar nicht aber habe gehofft, weil du ja (while... ) geschrieben hast, dass ich irgendwie eine while schleife bauen muss
 

BasicC

Erfahrenes Mitglied
C:
#include <stdio.h>

int main (){

   



FILE* fp = fopen("/Users/*******/Desktop/TI SS18/dict-american.txt","r");

if(fp == NULL){

return 1;

}

char array[250000];



while(fgets(array,250000,fp) != NULL) printf(array);

fclose(f);

return 0;

}

Ok ich habe die While schleife hinbekommen bekomme auch alle Wörter aus der Liste wie fahre ich fort ?
 

BasicC

Erfahrenes Mitglied
C:
#include <stdio.h>

#include <stdlib.h>



int main (){

   

   

    FILE* fp = fopen("/Users/********/Desktop/TI SS18/dict-american.txt","r");

    if(fp == NULL){

        return 1;

    }

    char c;

   

    c = fgetc(fp);

    }while(c != EOF);



    fclose(fp);

    return 0;

}

So habe ich das große Array weg gemacht .
Nun weiß ich nicht wie ich eine Funktion einbaue um zu sagen nur Wörter die länger als 4 Zeichen haben .
 
Zuletzt bearbeitet:

cwriter

Erfahrenes Mitglied
o_O

Langsam weiss ich echt nicht mehr weiter.

2 Dimensionaler Array (bzw. ein Pointerkonstrukt, das 2D-Arrays halten kann: char** array;

250k Elemente erstellen:
array = (char**)malloc(sizeof(char*) * 250e3);

Strings einlesen: fgets(tmp, 64, f), auf null prüfen, Länge prüfen.

Zuweisen (Element j): array[j] = strdup(tmp);

Und den Rest kannst du nun echt selber.

cwriter
 
Zuletzt bearbeitet:

BasicC

Erfahrenes Mitglied
C:
char** array;

    array = (char**)malloc(sizeof(char*)*250e3);

    if(!fp){

        fgets(*array, 64, fp);

    }
    fclose(fp);

    return 0;
}

Wie binde ich die Überprüfung auf NULL ein einfach hinter der Klammer von (fgets() != NULL ?)
Was meinst du mit Länge überprüfen ?

und das mit element i zuweisen auf array = stdrup (*array) verstehe ich nicht .
also ich müsste ja eine variable deklarieren auf int i;
wie weise ich zu was meinst du genau damit ?