Ir para conteúdo
Fórum Script Brasil
  • 0

método da bolha.


alex_dino

Pergunta

Sempre fico na dúvida quando tenho tenho que usar strlen ou o strcpy.............Fiz o programa assim.

Listar em ordem crescente os nomes dos alunos do curso de Sistemas de Informação

que estão armazenados em um vetor. Utilizar o método da bolha.

# define TAMANHO 5
#include <stdio.h>
int main (void)
{
    char nomes[TAMANHO][10],i=0,j,aux,cont;
    
    for (cont=0;cont<TAMANHO;cont++){
         printf ("digite o nome\n ");
         gets (nomes[cont]);
    }
    for (i=0;i<TAMANHO;i++)
        for (j=i+1;j<TAMANHO;j++){
             if (nomes[i]strlen (nomes[j])
                aux strcpy nomes[i];
                nomes[i]=nomes[j];
                nomes[j]=aux;
        }
    printf ("crescente %s",nomes[j]);
    system ("pause");
    return (0);
}

Sempre da erro, como seria a ordem certa para usar eles no programa??????????

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Dá uma olhada nesse código que eu fiz, adicionei comentários pra ficar mais legível:

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

// vai retornar o código da menor(a que vem primeiro) string, 0 para a primeira, 1 para a segunda.
int strcomp(char *string1, char *string2){
    char *p1, *p2;
    p1 = string1;
    p2 = string2;
     while(*p1 && *p2){
        if(*p1 == *p2){ // vai varrer as duas strings até que encontre  um caractere direfente
            p1++;
            p2++;
        }
        else if(*p1 > *p2) // quando encontrar vai retornar a string que vem primeiro
            return 1; // segunda vem primeiro
        else
            return 0; // primeira vem primeiro
    }
    if(*p1) return 1; // se o laço parar num instante e houver uma string com mais caracteres que a outra
    else if(*p2) return 0;  // vai retornar a mais curta para colocar na frente em relação à ordem
}
// vai ordenar comparando n-1 vezes, onde n é o número de strings no array - demonio das trocas(bolha)
// vai usar a função acima para comparar a strings e consequentemente realizar a troca
void sort_str_array(char array[][15]){
    char straux[15]; // string auxiliar que vai conter o valor temporário da string a ser trocada pela outra
    register int cont=0, cont2=0;
    // inicio da comparação
    for(cont=1; cont<15; cont++)
        for(cont2=0; cont2<14; cont2++){ // vai parar no penúltimo pra evitar comparar com o inexistente
            if(strcomp(array[cont2], array[cont2+1])){
                strcpy(straux, array[cont2+1]);            // vai realizar a troca de strings
                strcpy(array[cont2+1], array[cont2]);    // colocando assim em ordem alfabética
                strcpy(array[cont2], straux);
            }
        }
}

void main(void){
    char string_array[15][15];
    int cont=1;
    while(cont<=15){
        printf("Digite a %d palavra: ", cont);
        scanf("%15s", string_array[cont-1]);
        cont++;
    }
    sort_str_array(string_array); // chamada da função de ordenação
    cont=1;
    while(cont<=15){
        printf("string_array[%d] = %s\n", cont, string_array[cont-1]);
        cont++;
    }
    getch();
}

strlen(str1) você usa pra "pegar" o tamanho da str1 e strcpy(str1, str2) copia o conteudo de str2 em str1 e ainda tem a strcmp(str1, str2) compara duas strings e retorna um inteiro baseado no resultado: zero se as duas são iguais, < 0 se str1 é menor que str2 e > 0 caso contrário. Lembrando que pra usar essas e mais funções de manipulação de string você tem que incluir o header string.h.

Se você preferir, aqui tá o código fonte pra baixar:

http://www.4shared.com/file/73840546/f8c01...na_strings.html

Saiba mais sobre essas e as outras funções do string.h aqui:

http://www.cplusplus.com/reference/clibrary/cstring/

Espero ter ajudado,

Abraço.

Editado por Ark
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...