C从TexFile创建数组

时间:2017-04-07 14:55:53

标签: c arrays file input document

我正在尝试从文本文件中创建一个单词数组。我可以让它正确打印出值,但我需要一个我可以实际使用的数组。在我拥有这个数组后,我必须对我存储的单词做各种各样的事情,比如计算每个长度。现在我只需要帮助制作一个我可以实际使用的数组。

以下是代码:

# 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]);
    //
    //}

1 个答案:

答案 0 :(得分:1)

代码没有编译。如果您知道长度可以使用char数组,则不必使用malloc从文件读取数组。

文件 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

代码

#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;
}

测试(这是你的数组)

$ ./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...