2017-04-07 1 views
0

J'essaie de créer un tableau de mots à partir d'un fichier texte. Je suis capable de l'imprimer correctement, mais j'ai besoin d'un tableau avec lequel je peux travailler. Après avoir ce tableau, je dois faire différentes choses avec les mots que j'ai stockés, comme compter chacun leur longueur. Pour l'instant j'ai juste besoin d'aide pour faire un tableau avec lequel je peux réellement travailler.C Création d'un tableau à partir de TexFile

Voici le code:

# include <stdio.h> 
# include <stdlib.h> 
# include <string.h> 


int main (int argc, char* argv[]){ 
    // First Read in First novel File 
    FILE *fp; 
    char *ProgFile; 

    // Variables for Parsing 
    int i = 0; 
    int j=0; 
    char *cp; 
    char *bp; 
    char line[255]; 
    char *array[5000]; 
    int x; 
    int wordCount=0; 
    int wordCountPerNovel; 


    // Adjusting the file name to include txt and corresponding number 
    strcat(argv[1],"_1.txt"); 
    ProgFile = argv[1]; 

    // Open Each File 
    fp=fopen(ProgFile,"r"); 
    if(fp==NULL)printf("error"); 
    else printf("bin file loaded: '%s'",ProgFile); 
    // Now begin analysing 
    // Part 1 
    // Parse Entire Document into Array of Strings 
    while (fgets(line, sizeof(line), fp) != NULL) { 
      bp = line; 
      while (1) { 
        cp = strtok(bp, ",.!?<97> \n"); 
        bp = NULL; 
        if (cp == NULL)break; 
        array[i++] = cp; 
        printf("Check print - word %i:%s:\n",i-1, cp); 
      } 
    } 
    // At this point i is the last word that was iterated, -1 since it breaks out after being added 
    // This gets total words of all novels 

    wordCount=wordCount+(i-1); 
    printf("\nTotal words %i\n",wordCount); 
    // Find Total number of letters 
    //for (i=1;i<15;i++){ 
    //  printf("My value: %s \n",finalArrayWord[i]); 
    // 
    //} 
+0

Vous ne demandez pas vraiment une question. – melpomene

+0

Qu'est-ce qu'un tableau * avec lequel je peux réellement travailler *? – Arash

+0

1) 'strcat (argv [1]," _ 1.txt ");' Ce n'est pas possible. – BLUEPIXY

Répondre

1

Le code ne compile pas. Si vous connaissez la longueur, vous pouvez utiliser char array et vous n'avez pas besoin d'utiliser malloc pour lire un fichier dans un tableau.

fichier

de 1.txt

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatu 

Code

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

void read_words (FILE *f) { 
    char x[1024]; 
    char **a; 
    a = malloc(1024 * sizeof(char*)); 
    for (int i = 0; i < 1024; i++) 
     a[i] = malloc((1024+1) * sizeof(char)); 
    int i = 0; 
    while (fscanf(f, " %1023s", x) == 1) { 
     strcpy(a[i], x); 
     i++; 
    } 
    for (int j = 0; j < i; j++) { 
     printf("%d %s\n", j, a[j]); 
    } 
} 
int main(void){ 
    read_words(fopen("1.txt", "r")); 
    return 0; 
} 

Test (voici votre tableau)

$ ./a.out 
0 Sed 
1 ut 
2 perspiciatis 
3 unde 
4 omnis 
5 iste 
6 natus 
7 error 
8 sit 
9 voluptatem 
10 accusantium 
11 doloremque 
12 laudantium, 
13 totam 
14 rem 
15 aperiam, 
16 eaque 
17 ipsa 
18 quae 
19 ab 
20 illo 
21 inventore 
22 veritatis 
23 et 
24 quasi 
25 architecto 
26 beatae 
27 vitae 
28 dicta 
29 sunt 
30 explicabo. 
31 Nemo 
32 enim 
33 ipsam 
34 voluptatem 
35 quia 
36 voluptas 
37 sit... 
+0

Cette erreur de segmentation. – Mmsyther

+0

Voici le fichier de test qui doit fonctionner. – Mmsyther

+0

Loomings Appelez-moi Ishmael. Il y a quelques années, je n'ai jamais vu combien de temps il y avait de l'argent dans ma bourse, et rien de particulier pour m'intéresser à terre, je pensais naviguer un peu et voir la partie aquatique du monde. C'est un moyen que j'ai de chasser la rate et de réguler la circulation. Chaque fois que je me trouve de plus en plus sombre au sujet de la bouche; chaque fois que c'est un novembre humide et bruineux dans mon âme; chaque fois que je trouve mys – Mmsyther