Trier un tableau de char en C

Je suis en train de créer un programme qui, si un utilisateur entre un mot (dont la longueur maximale est de 10), affiche ce mot dans l’ordre alphabétique.

Le code ci-dessous est celui que j’ai écrit.

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

#define MAX 10

void bubble_sort(char* arr, int n);

int main(void) {

    char tab[MAX];

    int n = sizeof(tab) / sizeof(char);

    scanf("%s", tab);

    bubble_sort(tab, n);

    printf("%s", tab);

    return 0;
}

void bubble_sort(char* arr, int n) {

    int i, j, tmp = 0;

    for (i = 0; i < n - 1; i++) {
        for(j=0;j<i-1;j++)
            if (*(arr+j) > *(arr+j+1)) {
                tmp = *(arr+j);
                *(arr+j) = *(arr+j+1);
                *(arr+j+1) = tmp;
            }
    }

}

Mais cela ne fonctionne pas. J’ai utilisé le tri à bulles. Je ne suis pas compétent pour utiliser les tableaux de pointeurs et le tri, donc je ne peux pas attraper ce qui ne va pas.

Je travaille sur Visual Studio 2019, et il indique que la valeur de retour a ignoré scanf(). Je n’arrive pas à comprendre. Qu’est-ce qui ne va pas ?

Voilà, vous avez eu quelque erreur à fixer: Voici le code fonctionnel:

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

#define MAX 20

void bubble_sort(char* arr, int n);

int main(void) {

    char tab[MAX];

    scanf("%s", tab);
    int n=0;
    
    n=strlen(tab);
    bubble_sort(tab, n);

    printf("%s", tab);

    return 0;
}

void bubble_sort(char* arr, int n) {

    int i, j, tmp = 0;

    for (i = 0; i < n; i++) {
        for(j=0;j<n-i-1;j++)
            if (*(arr+j) > *(arr+j+1)) {
                tmp = *(arr+j);
                *(arr+j) = *(arr+j+1);
                *(arr+j+1) = tmp;
            }
    }

}

Résultat:

caefbnm
abcefmn

Je vous recommande aussi de lire ces tutoriels: