linally 0 Denunciar post Postado Maio 1, 2013 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
reebr 94 Denunciar post Postado Maio 1, 2013 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
Mateus GP 13 Denunciar post Postado Maio 2, 2013 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