Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Leandro Santana_650847

RESOLVIDO Ordenação de nomes em C

Recommended Posts

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; }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use uma função para, durante a comparação, deixar todos os caracteres maiúsculos (ou minúsculos)

Compartilhar este post


Link para o post
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.

Editado por ScreenBlack

Compartilhar este post


Link para o post
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));}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei nisso na hora. Não comentei isso para não complicar a vida do nosso colega que está iniciando.  ^_^

 

Mas, essa sua maneira é uma forma mais customizada e eficiente. Além de simplificar o código, reduzirá chamadas ao sistema.  :D

 

Att.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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 :/

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    A opção resolvido fica logo abaixo do post, ao lado de denunciar, citar..

    Editado por olliver.soul

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×