Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

linally

Comparar duas strings

Recommended Posts

Gente, alguem pode me ajudar nessa questão?

 

Comparar duas strings de forma similar à função strcmp, mas desconsiderando-se as diferenças entre maiúsculas e minúsculas. Assim, "abc" é "igual" a "ABC", "cadeira" vem antes de "MESA" (ou seja, a função deve retornar -1), e assim por diante.
Ou seja, eu NÃO posso usar a função strcmp , se nao seria bem mais tranquilo né hehe
Porém nao estou conseguindo acertar na logica.. alguem pode me dar uma luz pf?? Olha como esta ficando:
char maiusc(char c){
    if(c>='a' && c<='z')
        c=c-32;
    return c;
}
    
int compara(char s1[],char s2[]){
    int i
    for(i=0;i<strlen(s1);i++){
        s1[i]=maiusc(s1[i]);
        s2[i]=maiusc(s2[i]);
        p=s1[i]-s2[i];
        if(p<0)
            p=-1;
        else if(p>0)
            p=1
        return p;            
        }
    }
}
 
int main (){
    char s1[8],s2[5];
    int resp=compara(s1,s2);
    if(resp==-1)
        printf("A string s1 vem antes da s2");
    if(resp==1)
        printf("A string s2 vem antes da s1");
    if(resp==0)
        printf("As strings sao iguais");
}
Sei que o return dentro do for esta errado , mas n sei como mudar !! Socorro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro veja se a quantidade de elementos da S1 é igual a da S2, se não for você já para a execução ali mesmo dizendo que não são iguais. Do contrário você inicia verificando elemento por elemento até que encontre um diferente (se existir).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Linally, preste um pouco mais de atenção na sintaxe da linguagem. Você cometeu poucos erros, quase nenhum, na lógica.

 

Por favor reflita na correção.

 

#include <stdio.h>
#include <string.h>

char maiusc(char c)
{
    if((c >= 'a') && (c <= 'z'))
        c -= 32;

    return c;
}

int compara(char s1[],char s2[])
{
    int i, p; //int i

    for(i = 0; i < strlen(s1); i++)
    {
        /*
         Você está alterando as strings,
         normalmente, uma função de
         comparação não faz isto.
        */
        // s1[i]=maiusc(s1[i]);
        // s2[i]=maiusc(s2[i]);

        p = maiusc(s1[i]) - maiusc(s2[i]); // p não foi declarada

        if(p != 0)
        {
            if(p < 0)
                p = -1;
            else
                p = 1;

            break;
        }
        //return p;
    }
    //}
    return p;
}

/* Alterações desprezíveis */

void _resp (int i)
{
    if(i == -1)
        puts("A string s1 vem antes da s2");
    else if(i == 1)
        puts("A string s2 vem antes da s1");
    else
        puts("As strings sao iguais");
}

int main ()
{
    char s1[256] = "MESA", s2[256] = "MeSa";

    printf("s1 = %s\ns2 = %s\n", s1, s2);
    _resp(compara(s1, s2));

    strcpy(s1, "Abelha");
    strcpy(s2, "Boi");
    printf("\ns1 = %s\ns2 = %s\n", s1, s2);
    _resp(compara(s1, s2));

    strcpy(s1, "Casa");
    strcpy(s2, "Apartamento");
    printf("\ns1 = %s\ns2 = %s\n", s1, s2);
    _resp(compara(s1, s2));
    return 0;
}

 

Qualquer dúvida, estou a sua disposição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.