Hey everyone! I am having trouble with searching. My code compiles but doesn't give what I want. When I output the database array it only gives me the last word of the input file repeated d_size many times...Here is the code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const unsigned C_MAX = 1000;
int exist(char* database[], unsigned dz, char* target){
unsigned lower = 0;
unsigned upper = dz;
while (lower < upper){
unsigned middle = (lower + upper)/2;
if(strcmp(database[middle],target) == 0)
return 1;
if(strcmp(database[middle],target) > 0)
upper = middle;
else
lower = middle + 1;
}
return 0;
}
void swap(char **w, char **a)
{
char *temp;
temp = *w;
*w = *a;
*a = temp;
}
void sort(char **word, unsigned int length)
{
int i = 0;
int j = 0;
for(i=0; i<length; i++)
for(j=i+1; j<length; j++)
if(strcmp(word[i],word[j])>0){
swap(&word[i],&word[j]);
}
}
int main(int argc, char ** argv){
FILE *file;
file = fopen(argv[1],"r");
unsigned d_size = 0;
char* database[C_MAX];
char w[C_MAX];
while (d_size < C_MAX && fscanf(file,"%s",w)!=EOF){
char *p = malloc(strlen(w)+1);
strcpy(p,w);
database[d_size] = p;
++d_size;
}
sort(database, 0 + d_size);
while (scanf("%s",w)){
if (exist(database, d_size, w) == 1)
printf("yes\n");
else
printf("no\n");
}
return 0;
}