如何清空Char Array并在C中重用它?

时间:2016-03-26 03:43:02

标签: c arrays file

我正在尝试阅读文件。我想从文件中读取每一行,并检查该行中是否有任何拼写错误。

为此,我添加了条件,即文件中的数据将存储在缓冲区中,直到它获得新的行字符'\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;
  }
}

任何建议将不胜感激。 提前谢谢。

1 个答案:

答案 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;
  }

对于每行读取,您必须将0分配给i。之后,您必须将null分配给缓冲区中的第0个位置。 您可以尝试上面的代码循环它将起作用。