fortunecat Posted June 29, 2021 at 02:20 PM Report Share #622810 Posted June 29, 2021 at 02:20 PM 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 More sharing options...
rbsrbs_dev Posted June 30, 2021 at 11:12 PM Report Share #622842 Posted June 30, 2021 at 11:12 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now