예제 #1
0
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);
}
예제 #2
0
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));

}