2016-07-09 14 views
0

Ich brauche Ihre Meinung dazu, wie ich diesen Code verbessern kann oder ob ich diesen Code verbessern muss. Es liest eine Eingabedatei und analysiert sie in Wörter und speichert sie dann in einer dynamischen Struktur wie eine verknüpfte Liste oder einen Baum. Ich möchte wissen, ob es effektiv ist oder ob es effektiver sein könnte.Sätze (Zeilen) in Wörter zerlegen

int maxSize = 256; 
int currSize = maxSize; 
int i = 0; 
int j = 0; 
int c; 
char *line = (char*)malloc(maxSize); 
char * pch; // 

while((c = fgetc(input)) != EOF) 
{ 
    line[i++] = c; 

    if(c == '\n') 
    { 
     line[i] = '\0'; 
     pch = strtok (line," ,()?/|.!-\n:;^[]"); 
     while (pch != NULL) 
     { 
      //Here will be adding procedure 
      j++; 
      pch = strtok (NULL, " ,()?/|.!-\n:;^[]"); 
     } 

     line = (char*)malloc(maxSize); 
     currSize = maxSize; 
     i = 0; 
    } 

    if(i == currSize) 
    { 
     currSize = i + maxSize; 
     line = (char*)realloc(line,currSize); 
    } 
} 

Wir freuen uns auf Ihre Meinung. Vielen Dank.

+5

Trennung Wenn Ihr Code wie erwartet ausgeführt wird, kann diese Frage zu http://codereview.stackexchange.com/ gehören eher dann SO. .. Aber Ihr Code scheint eher unvollständig, da Sie 'Pch' nicht speichern. –

+0

// Hier wird das Verfahren hinzugefügt Anstelle dieses Kommentars habe ich dort hinzufügen Verfahren zum Speichern von Pch in verknüpften Liste, keine Sorge :) –

Antwort

0

Lesen Sie eine Zeile aus der Datei und speichern Sie in Array, dann lesen Sie das Array von Anfang an und Tokenize es !!!

Warum das, wenn Sie jedes Wort direkt in Tokens umwandeln können? P.S. Wenn Sie Wörter verschiedener Linien unterschiedlich zu verarbeiten haben, können Sie das tun, indem case '\n':

char *word=malloc(sizeof(char)*maxSize); 
    int i=0; 
    while(1){ 
     switch(c=fgetc(stdin)){ 
      case ',': case '(': case ')': case '?': case '/': 
      case '|': case '.': case '!': case '-': case '\n': 
      case ':': case ';': case '^': case '[': case']': case ' ': 
       word[i]='\0'; 
        //call your function here 
       i=0; 
       break; 
      case EOF: 
       word[i]='\0' 
       if(i>0); 
        //call your function 
       //file is read completely 
       return; 
      default: 
       test[i++]=c; 
     } 
     if(i==maxSize); //reallocate 
    }