【问题标题】:C Creating an Array from TexFileC 从文本文件创建数组
【发布时间】:2017-09-03 00:31:16
【问题描述】:

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

代码如下:

# 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) strcat(argv[1],"_1.txt"); 不能这样。
  • 你有一个问题,当你分配 array[i++] = cp 时,你正在使用相同的内存区域。在下一个循环中,您将在执行 fget(line) 时覆盖,因为 strtok 将返回指向 line 的指针。当您第二次调用 strtok 时,您还有另一个错误,请查看 strtok 手册页。
  • 和@BLUEPIXY 是对的,你可以在 argv 之后写,内存不是你的,你必须做类似 snprintf(myNewString,maxlenofMyNewString,"%s_1.txt",argv[1]) ;我认为你必须学习一些关于在 C 中使用内存和指针的知识。

标签: c arrays file input document


【解决方案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...

【讨论】:

  • 此段错误。
  • 若隐若现的叫我以实玛利。几年前——不管具体多久——我的钱包里几乎没有钱,在岸上也没有什么特别让我感兴趣的东西,我想我会航行一点,看看世界的水域。这是我驱除脾脏和调节循环的一种方法。每当我发现自己的嘴巴越来越狰狞;每当我的灵魂里是潮湿、下着毛毛雨的十一月;每当我找到我的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2012-02-28
  • 2017-03-06
相关资源
最近更新 更多