2
respostas

Como fazer a comparaçao aproximada de strings em C?

Quero fazer a comparação de nomes em um arquivo, só que preciso de fazer de forma aproximada. por exemplo: Nome: João

quando eu digitar Jo, o programa ja me lista os possiveis nomes que tem as letras Jo.

Segue abaixo o código que eu fiz, só que só consegui fazer ela de forma exata.

void pesquisaNaoExata(){
    cadastro dados;
    char nomeNaoExato[20];
    FILE *fp;
    fp = fopen("clientes.dat", "rb");
    if(fp == NULL){
        printf("## ERROR404 ##Nao foi posssivel abrir o programa!!");
        system("pause");
        exit(1);
    }
    fread(&dados, sizeof(dados), 1, fp);
    printf("Digite o nome da pessoa que voce deseja achar: ");
    scanf("%s",nomeNaoExato);
    while(!feof(fp)){
        if(strcasecmp(nomeNaoExato, dados.nome)==0){
            printf("\n\n\tNome:%s\n\tIdade:%d\n\tEmail:%s\n\n",dados.nome, dados.idade, dados.email);
        }
        fread(&dados, sizeof(dados), 1, fp);
    }
    fclose(fp);
}

Grato desde já.

2 respostas

Já resolvi esse problema, irei colocar a solução caso alguém precise.

void pesquisaNaoExata(){
    cadastro dados;
    char nomeNaoExato[20];
    int achou=0;
    FILE *fp;
    fp = fopen("clientes.dat", "rb");
    if(fp == NULL){
        printf("## ERROR404 ##Nao foi posssivel abrir o programa!!");
        system("pause");
        exit(1);
    }
    fread(&dados, sizeof(dados), 1, fp);
    printf("Digite o nome da pessoa que voce deseja achar: ");
    scanf("%s",nomeNaoExato);
    while(!feof(fp)){
        if(strstr(dados.nome, nomeNaoExato)!=NULL){
            printf("\n\n\tNome:%s\n\tIdade:%d\n\tEmail:%s\n\n",dados.nome, dados.idade, dados.email);
            achou++;
        }
        fread(&dados, sizeof(dados), 1, fp);
    }
    if(achou == 0){
        printf("\n\tNenhum nome foi encontrado!!\n\n");
    }
    fclose(fp);
}

Opa Felipe!

Que bom que conseguiu resolver! Caso tenha mais alguma dúvida não esqueça de postar que a gente te ajuda!

Abraço!