Ir ao conteúdo
  • Cadastre-se

Ordenação de nomes em C


Ir à solução Resolvido por Leandro Santana_650847,

Posts recomendados

Olá senhores, estou com uma dúvida!

Tenho um programa que deve receber  nomes, ordená-los e em seguida pesquisar um nome digitado pelo usuário, mas o programa não discrimina letras maiúsculas e minúsculas! Como posso fazer para ele ordenar elas junto? Pois quando rodo o programa e insiro nomes com letras maiúsculas e minúsculas ele primeiro faz a ordenação das maiúsculas e depois das minúsculas, e deixa elas separadas.

 

OBS: omiti a parte do código que pesquisa, pois ele não é necessário!

#include <stdio.h>#include <stdlib.h>#include <string.h> char nome[5][30], aux[30];  int main(){     recebenome();    pula();    ordena();    pula();     return 0;} int recebenome(int i, int j){    printf("Digite a lista de nomes abaixo! \n\n");    for(i=0; i<5; i++){        gets(nome[i]);    }    return;} int ordena(int i, int j){    for(j=0; j<5; j++){        for(i=0; i<5-1; i++){            if(strcmp(nome[i], nome[i + 1]) > 0){                strcpy(aux, nome[i]);                strcpy(nome[i], nome[i + 1]);                strcpy(nome[i + 1], aux);            }        }    }     printf("\n\nNomes em ordem alfabetica: \n");     for(i=0; i<5; i++){         printf("%s\n",nome[i]);    }    pula();     return; }}
Link para o comentário
Compartilhar em outros sites

O código que você deve ter visto do nosso colega olliver.soul, contido no rodapé do post, é apenas uma assinatura dele.

Para executar o que ele comentou, não há necessidade de ponteiros, mas, apenas troca de conteúdo armazenado no vetor.

 

Todo carácter em C, é no fundo, um valor inteiro (popularmente de 8 bits e padrão ASCII), que varia entre 65 e 90 para maiúsculos e entre 97 e 122 para minúsculos.

Veja em: ASCII Table

 

Assim, podemos concluir que, para fazer a conversão do caracter 'A' para 'a', basta somarmos 32 na posição do carácter 'A'.

Exemplo:

char letra = 'A';letra = letra + 32;

 

Teremos como resultado:

'a'

Usando esse princípio, é possível também, fazer a ordenação de forma mista, ou seja, mantendo os carácteres maiúsculos e minúsculos como sendo o mesmo visualmente.

 

Att.

Link para o comentário
Compartilhar em outros sites

Screen,

 

Outra forma legal de converter, é ativando/desativando o quinto bit (considerando a 'string' de bits de 0 a n da direita para a esquerda)

 

No exemplo do 'A', a string de bits é 1000001 e do 'a' é 1100001. Logo, para converter de A -> a, basta ativar o quinto bit.

 

Isso pode ser feito da seguinte forma:

 

#define MINUSCULA(ch) (((ch >= 'A') && (ch <= 'Z')) ? ch | (1<<5) : ch)

 

Aí basta criar uma função para converter o ponteiro passado como parâmetro:

void minuscula(char *str){    while(*str++ = MINUSCULA(*str));}
Link para o comentário
Compartilhar em outros sites

  • Solução

Por favor gente n vamos complicar kkkkkk 

Meu professor deu uma solução muito simples, no momento do bubble sort, no strcmp, colocar um "i" no final "strcmpi", esse i vai fazer com que ele ignore se é maiúsculo ou minúsculo.

 

Att.

ps: n sei editar o post pra colocar resolvido :/

Link para o comentário
Compartilhar em outros sites

Existem também a função "stricmp()", que faz a mesma coisa (até onde eu sei). Porém, ambas não fazem parte do padrão ANSI, portanto, não é garantia que funcione em todas as bibliotecas C.

Por exemplo, na biblioteca padrão do S.O. FreeBSD (onde costumo "programar") não existe essa função, já na biblioteca do MinGW (GCC for Windows), ela está disponível.

 

Por isso que, eu não comentei sobre ela.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...