int main(int argc, char* argv[]) { long ying_length, yang_length, length, diff; char* ying; char* yang; char ying_hold[MAX_VAR_SIZE], yang_hold[MAX_VAR_SIZE]; register int i, j, k; double weight; int flags[2]; char* flag_str; /*for (i=0; i<argc; i++) { printf("Arg %d: '%s'\n", i, argv[i]); } */ flag_str = argv[3]; // printf("flag_str: '%s'\n", flag_str); for (i=0; i<2; i++) { flags[i] = 1 ? flag_str[i] == 49 : 0; // printf("flag bit %d: '%d'\n", i, flag_str[i]); // printf("flag bit %d: '%d'\n", i, flags[i]); } // flags[0] = 0; // flags[1] = 1; ying = argv[1]; yang = argv[2]; ying_length = strlen(ying); yang_length = strlen(yang); length = (ying_length > yang_length) ? ying_length : yang_length; printf("ying: '%s' (len %ld)\n", ying, ying_length); printf("yang: '%s' (len %ld)\n", yang, yang_length); printf("length: %ld\n", length); printf("flags: %d %d\n", flags[0], flags[1]); ying_hold[0] = yang_hold[0] = 0; // strncat(ying_hold,DOT60,length); // strncat(yang_hold,DOT60,length); strncat(ying_hold,NULL60,length); strncat(yang_hold,NULL60,length); // printf("ying_hold: '%s'\n", ying_hold); // printf("yang_hold: '%s'\n", yang_hold); for (i=0; i<ying_length; i++) ying_hold[i] = ying[i]; for (i=0; i<yang_length; i++) yang_hold[i] = yang[i]; // printf("ying_hold: '%s'\n", ying_hold); // printf("yang_hold: '%s'\n", yang_hold); strcmp95(ying_hold, yang_hold, length, &flags); }
int jwcmp(const void* str1, const void* str2, size_t size){ char *delim=" "; char *name1, *name2, *n1, *n2, *n1_last, *n2_last; int len1, len2, tok_len1, tok_len2, num_tok1=0, num_tok2=0; int same_len=0; double score=0, tok_score, myres; if(str1 == NULL || str2 == NULL || strlen((char*)str1)*strlen((char*)str2) == 0) //missing! return 1; /* if(strcmp((char*)str1, "BARCOHEN")==0 || strcmp((char*)str2, "BARCOHEN")==0) printf("nospacecmp(%s, %s): %d\n", (char*)str1, (char*)str2, nospacecmp((char*)str1, (char*)str2)); */ if(strcmp((char*)str1, (char*)str2) && 0==nospacecmp((char*)str1, (char*)str2)){ //printf("Nospace match: %s, %s\n", (char*)str1, (char*)str2); return JW100; } name1 = (char*)malloc(size); name2 = (char*)malloc(size); memcpy(name1, (char*)str1, size); memcpy(name2, (char*)str2, size); len1 = strlen(name1); len2 = strlen(name2); n1 = n1_last = name1; while((n1_last=strsep(&n1, delim)) != NULL){ tok_len1 = strlen(n1_last); tok_score=0; num_tok2=0; memcpy(name2, (char*)str2, size); n2 = n2_last = name2; while((n2_last=strsep(&n2, delim)) != NULL){ // printf("\t\t%s, %s\n", n1_last, n2_last); tok_len2 = strlen(n2_last); tok_score = MAX(tok_score, ((MIN(tok_len1, tok_len2) <= 1) ? 0 : strcmp95(n1_last, n2_last, MAX(tok_len1, tok_len2)+1, jw_opts))); num_tok2 += (tok_len2 > 1); //printf("\t\ttok_score: %g\n", tok_score); } score += (tok_score > 0.95); num_tok1 += (tok_len1 > 1); } /* printf("%s, %s\n", name1, name2); printf("score: %g, num_tok1: %d, num_tok2: %d\n", score, num_tok1, num_tok2); */ myres = (MIN(num_tok1, num_tok2) == 0) ? 0 : score/MIN(num_tok1,num_tok2); same_len = (num_tok1==num_tok2); // printf("myres: %g\n", myres); //printf("nc1: %d\n", nc1); //printf("nc2: %d\n", nc2); free(name1); free(name2); return(2*(myres >= 0.33) + (myres >= 0.66) + (myres > 0.99) + (myres > 0.99 && MIN(num_tok1, num_tok2) >= 2) + (myres > 0.99 && same_len)); }