2017-04-07 3 views
0

텍스트 파일에서 단어 배열을 만들려고합니다. 값을 올바르게 출력 할 수는 있지만 실제로 작업 할 수있는 배열이 필요합니다. 이 배열을 얻은 후에는 각 단어 길이를 세는 것과 같이 내가 저장 한 단어에 대해 여러 가지 일을해야합니다. 현재로서는 실제로 작업 할 수있는 배열을 만드는 데 도움이 필요합니다. 이 코드는 컴파일되지 않았다C TexFile에서 배열 만들기

# 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

당신은 실제로 질문을하지 않았다 (여기 배열입니다). – melpomene

+0

* 실제로 사용할 수있는 * 배열은 무엇입니까? – Arash

+0

1)'strcat (argv [1], "_ 1.txt");'할 수 없습니다. – BLUEPIXY

답변

1

: 여기

는 코드입니다. 길이를 알고 있다면 문자 배열을 사용할 수 있으며 파일에서 배열로 읽는 데 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... 
+0

이 부분은 잘못되었습니다. – Mmsyther

+0

다음은 작동해야하는 테스트 파일입니다. – Mmsyther

+0

직조기 전화주세요 이스마엘. 몇 년 전에는 내 지갑에 돈이 거의 또는 전혀없고 얼마나 오래 머물렀는지 신경 쓰지 않았습니다. 나는 조금이라도 항해하고 물에 젖은 부분을 볼 것이라고 생각했습니다. 비장을 없애고 순환을 조절하는 방법입니다. 언제든지 입가에 대해 끔찍한 성장을 할 수 있습니다. 내 영혼에 습기가 많고 이슬비가 내리는 11 월 일 때마다. 내가 mys를 찾을 때마다 – Mmsyther