2010-11-24 5 views
1

comment trier char firstName dans une fonction et que les noms sont déjà lus à partir d'un fichier texte et que des bibliothèques externes peuvent également être utilisées Tous les noms des étudiants sont fournis dans un fichier texte qui est lu dans un tableau d'enregistrements étudiantComment trier le nom de char dans une structure en utilisant C Language

struct student{ 
    char*lastName; /*name of the student*/ 
    char*firstName; 
    int age;  /*age of the student*/ 
    float grade[3]; 
} 
+0

Vous pouvez mettre en forme du code en le sélectionnant et en appuyant sur CTRL + K. Utilisez l'aperçu. – EboMike

+0

En outre, votre question ne fournit pas assez d'informations. Quel genre de collection/collection avez-vous? Cette structure ne nous dit rien. – EboMike

Répondre

0

La manière simple, en supposant que vous n'êtes pas autorisé à utiliser des bibliothèques externes, est avec bubblesort. Ecrivez une fonction qui détermine si un tableau de struct student est déjà trié. Ensuite, écrivez une fonction qui marche à travers un tel tableau, en comparant les paires adjacentes d'étudiants. Si elles sont hors service, échangez-les. Utilisez le résultat de la première fonction comme clause conditionnelle d'une boucle while et la seconde comme corps. Si vous êtes autorisé à l'utiliser, qsort() de stdlib.h est de loin la meilleure approche.

+0

Le tri par insertion est généralement plus simple et plus rapide. De même, 'qsort()' n'est pas une bibliothèque externe, mais est inclus dans la bibliothèque standard C. –

+0

ok maintenant je travaille sur la façon d'utiliser le qsort() –

4

La fonction qsort est généralement utilisée en C pour trier un tableau. L'un des paramètres est un pointeur vers une fonction de comparaison. Écrivez la fonction afin qu'elle compare les deux pointeurs de la façon que vous voulez. Vous pouvez même avoir différentes fonctions de comparaison de sorte que vous ayez le choix à l'exécution qui sera appliqué.

int StudentCompare(const void * elem1, const void * elem2) 
{ 
    const struct student * left = (const struct student *) elem1; 
    const struct student * right = (const struct student *) elem2; 
    int result; 
    result = strcmp(left.firstName, right.firstName); 
    if (result == 0) 
     result = strcmp(left.lastName, right.lastName); 
    return result; 
} 
+0

comment ou quoi dois-je déclarer à gauche, à droite et à l'étudiant comme ?? –

+0

En référence à la page de manuel qsort (3), vous verrez que StudentCompare() est l'argument 'compar'. Si vous avez struct student students [100], alors vous appelleriez qsort (étudiants, 100, sizeof (struct student), StudentCompare); – Wade

+0

En outre, je pense qu'il devrait être «struct student» au lieu de simplement «étudiant» dans l'implémentation StudentCompare(). – Wade