2016-03-26 2 views
1

ファイルを読み取ろうとしています。ファイルから各行を読み込み、その行にスペルミスがないかどうか確認したい。Char Arrayを空にしてCでそれを再利用するには?

私は、ファイルからのデータが新しい行の文字化け語句'\n'を得るまで、バッファに格納されるという条件を追加しました。そしてこの行を取得した後、私はバッファを空にしてその中に値を挿入し直したい。次のように私は同じのために使用しています

コードは次のとおりです。

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

#define W_COUNT 23800 
#define MAX_LEN 100 

char *dict[W_COUNT]; 
char buffer[MAX_LEN]; 
int num_words;  //No of Words 
char *statement[W_COUNT]; 
char buffer1[MAX_LEN]; 

void read_dictionary(); 
void file_read(char *); 
void spell_check(); 
int word_search(char*); 

int main(int argc, char*argv[]){ 
    int i; 
    if(argc < 2){ 
    printf("Expected Filename.\n"); 
    exit(0); 
    } 
    read_dictionary(); 
    file_read(argv[1]); 
// spell_check(); 
} 

void read_dictionary(){ 
    FILE *fd; 
    int i = 0; 
    fd = fopen("dictionary", "r"); 
    while (fscanf(fd,"%s",buffer) != EOF) 
    dict[i++] = strdup(buffer); 
    num_words = i; 
    fclose(fd); 
} 

void file_read(char *filename){ 
    FILE *fd; 
    int i = 0; 
    char c; 
    fd = fopen(filename,"r"); 
    /*while (fscanf(fd,"%s",buffer1) != EOF) 
    { 
    word[i++] = strdup(buffer1); 
    printf("File : %s\n", buffer1); 
    }*/ 
    while ((c = fgetc(fd)) != EOF) 
    { 
    buffer1[i++] = tolower(c); 
    if (c == '\n') 
    { 
     //printf("New Line\n"); 
     spell_check(); 
     buffer1[i] = 0; 

    } 
    //buffer1[i] = 0; 
    } 
    printf("Statement : %s\n", buffer1); 
    fclose(fd); 
} 

void spell_check(){ 
    char *str; 
    str = strtok(buffer1," .?,!-"); 
    while(str != NULL){ 
    if(!word_search(str)) 
    printf("%s Not found.\n",str); 
    str = strtok(0," .?,!-"); 
    } 
} 

int word_search(char *word){ 

    int high, low, mid; 
    high = num_words - 1; 
    low = 0; 
    int found = 0; 

    while (found == 0){ 
    mid = (low + high)/2; 
    if(strcmp(word, dict[mid]) == 0) 
    return 1; 
    else if(strcmp(word,dict[mid]) < 0) 
    high = mid - 1; 
    else 
    low = mid + 1; 
    if (low > high) 
    return 0; 
    } 
} 

任意の提案が理解されるであろう。 ありがとうございます。

+0

バッファの先頭にヌル文字を割り当てることができます。 –

+0

私は試しましたが、動作しません。最初の行だけをループします。 –

+0

ここで、コーディングでヌル文字をどこに割り当てるか? –

答えて

2
while ((c = fgetc(fd)) != EOF) 
    { 
    buffer1[i++] = tolower(c); 
    if (c == '\n') 
    { 
     //printf("New Line\n"); 
     spell_check(); 
     i = 0; 
     buffer1[i] = 0; 

    } 
    //buffer1[i] = 0; 
    } 

各行の読み取りについて、iに0を割り当てる必要があります。その後、バッファの0番目の位置にnullを代入する必要があります。 上記のコードを試しても問題ないでしょう。

+0

ありがとうございます.. –

関連する問題