Jump to content

Ordenar uma palavra por ordem alfabética


fortunecat

Recommended Posts

Pergunta: "Escreva um programa que ordene alfabeticamente, de forma crescente, as letras existente numa “string” previamente pedida ao utilizador. Esta ordenação deverá ser efetuada num vetor auxiliar que será inicializado com os endereços de memória de cada uma das letras existente na “string”. A construção deste vetor, o qual é constituído por endereços de memória, não poderá alterar a “string” original."

Por exemplo: a palavra "ana", no output ficaria "aan"

Já tentei mas não percebo porque está a dar erro

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

void ordenarString(char *string, int tamanho);

main()
{
   char string[100];
   int tamanho;
   
   printf("Introduza uma palavra\n");
   gets(string);
   
   tamanho=strlen(string);
   
   ordenarString(string,tamanho);
   
   scanf("%d",&string);
}

void ordenarString(char *string, int tamanho){
   int i, j, *aux[tamanho];
   
   for(i=0;i<10;i++){
        for(j=i+1;j<10;j++){
            if(strcmp(string[j], string[i])==-1){
                strcpy(aux, string[i]);
                strcpy(string[i], string[j]);
                strcpy(string[j], aux);

            }
        }
    }
}

Obrigada desde já!

Link to comment
Share on other sites

Olá fortunecat,

Vou fazer uma listagem de algumas observações por ordem de aparecimento:

main() não é uma definição válida, deves usar int main(void) ou então int main(int argc, char *agrv[]).

gets é uma função insegura e removida desde C11, isto porque não tens forma de restringir o programa de escrever para além dos 100 chars do teu buffer. Prefere usar fgets(string, 100, stdin).

scanf("%d", &string); não faz sentido nenhum. Supostamente não deves alterar a string original e o uso do especificador %d é incorreto, deves usar %s para ler strings. O & também está a mais, já que um array decay para um ponteiro. Provavelmente queres imprimir o array aux, mas para isso deves retorna-lo o que te obriga a usar memória dinamica, por isso aconselho-te primeiro a imprimires dentro da função ordenarString. Para conseguires imprimir precisas de implementar essa função já que o array são ponteiros para char o que não existe nenhum função standard que te consiga imprimir isso. 

int *aux[tamanho]; não está correto, queres um array de ponteiros para char.

O teu algoritmo parece ser uma tentativa de implementação de ordenação por seleção, o que te recomendo procurares na net como funciona. Mas assim por alto, os teus ranges estão errado: deves usar a variavel tamanho em vez da constante 10 e não vais ter que usar a função strcpy.

___

Um pequeno exercicio que te pode ajudar a perceber o que tens que fazer:

Imagina que o teu array string inicia no endereço 100 e tens estes valores em memória:

//       v endereço 100
string ['a', 'd', 'b', 'c', '\0']

que valores pretendes ter no teu array aux depois de correr a função ordenarString:

aux [?, ?, ?, ?, ?]


 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.