Ir ao conteúdo
  • Cadastre-se

Como fazer uma lista alfabética ajuda por favor


italobrenun

Posts recomendados

Olá galera, estou com muita dificuldade em fazer uma lista em ordem alfabética, eu não sei se é o compilador aqui se esta dando errado, pois as vezes ele fica "maluco" :D

Então estou apresentado a vocês o meu código, por que não sei, se estiver errado como faz.


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char nomes[2][10]; // quero somente dois nomes!
char nomes2[2][10];
char vet[2];
int x,y;



for(x=0;x<2;x++)

{
printf(" Digite o nome\n");
scanf("%s",&nomes[x]);

}

for(x=0;x<2;x++)
{
strcpy(nomes2[x],nomes[x]);

}



for(x=0;x<2;x++)
{

for(y=y+1;y<2;y++) /* coloquei y+1, com a intenção de: comparar a string que esta em primeira, com a string que esta em segunda! então sempre uma posição comparando com a próxima.*/
{

if(strcmp(nomes[x],nomes[y])>0) // se elas não forem iguais!
{

if(nomes[y]<nomes[x])
{
strcpy(vet,nomes[y]);
strcpy(nomes[y],nomes[x]);
strcpy(nomes[x],vet);
}
}
}
}
for(x=0;x<2;x++)

{
printf("\n%s",nomes[x]);


}

system("PAUSE");
return 0;
}

Eu realmente não sei o que esta errado!

Por favor me ajudem, eu agradeço !

Link para o comentário
Compartilhar em outros sites

Bem, acho que a princípio um erro que deu pra ver foi quando voce faz o for da variável y, voce inicializa como:

 for(y=y+1;y<2;y++) 

Até esse momento a variável não foi inicializada, portanto contém lixo, e mesmo assim voce usa ela apenas somando um ao valor que ela possui. Acho que sua intenção foi fazer:

 for(y=x+1;y<2;y++) 

Deixando y com uma unidade a mais que x

Depois disso, aparentemente você fez o código para ordenar duas stings mas de forma a poder aumentar isso facilmente para N strings. No entando, o método que voce usou funciona para duas strings mas não para mais que isso. Observe:

Se temos as strings:

C, B, A

seu programa vai comparar primeiro B com C, ver que C é menor e trocar, deixando:

B, C, A

Depois ele ocmpara B com A, ve que A é menor e troca, deixando:

A, C, B

Esse algoritmo se assemelha ao bubblesort, mas para funcionar como tal deve, ao termino dos for de comparação, ver se houve alguma troca. Se houve ele repete a ordenação. Ao ver que não houve nenhuma troca, então o vetor está ordenado e nada mais deve ser feito. Mais informações: http://pt.wikipedia.org/wiki/Bubble_sort

Link para o comentário
Compartilhar em outros sites

Segue um exemplo bem simples, mas fazendo a troca a partir do mesmo vetor:


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

#define SIZE 3

int main(void)
{
char nomes[SIZE][10] = { '\0' }; /* Inicializa estrutura */
char tmp[10];
int x = 0;
int y = 0;

for ( x = 0; x < SIZE; x++ )
{
printf("Digite o nome: ");
scanf("%s", nomes[x]);
}

for ( x = 0; x < SIZE; x++ )
{
for ( y = x + 1; y < SIZE; y++ )
{
if ( strcmp(nomes[x], nomes[y]) > 0 ) /* Se a posicao anterior for maior que a proxima, executa a troca */
{
strcpy( tmp, nomes[x] );
strcpy( nomes[x], nomes[y] );
strcpy( nomes[y], tmp );
}
}
}

for ( x = 0; x < SIZE; x++ )
printf("%s\n", nomes[x]);

system("PAUSE");
return 0;

}

Link para o comentário
Compartilhar em outros sites

O código acima está funcionando... porém achei uma coisa que pode perturbar

se um nome vier iniciado com Z maiúsculo ele é considerado menor que um a ou b minúsculo, por isso ou você usa somente um tipo de caixa ou pode usar esta função em meio ao código para não haver esses conflitos:

// retorna um caractere em Caixa baixa, exemplo: LowerCase('B') retorna 'b';
char LowerCase(const char ref)
{
if(ref >= 65 && ref <= 90)
{
return ref+32;
}
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!