C program to store Student records as Structures and Sort them by Name

CServer Side ProgrammingProgramming

In this problem, we are given a student’s record which contains student_id, student_name, student_percentage. Our task is to create a C program to store student records as structure and sort them by name.

Let’s take an example to understand the problem,

Input − student record =

{{ student_id = 1, student_name = nupur, student_percentage = 98},
{ student_id = 2, student_name = Akash, student_percentage = 75},
{ student_id = 3, student_name = Yash, student_percentage = 62},
{ student_id = 4, student_name = Jyoti, student_percentage = 87},
{ student_id = 5, student_name = Ramlal, student_percentage = 80}}

Output − student record =

{{ student_id = 2, student_name = Akash, student_percentage = 75},
{ student_id = 4, student_name = Jyoti, student_percentage = 87},
{ student_id = 1, student_name = nupur, student_percentage = 98},
{ student_id = 5, student_name = Ramlal, student_percentage = 80},
{ student_id = 3, student_name = Yash, student_percentage = 62}}

To solve this problem, we will first create a structure that will store the details of the student. Now, we will use qsort() and in that qsort, we will define a comparator function for this qsort that will compare the names of the structure using strcmp() method.

Example

The program to store Student records as Structures and Sort them by Name

 Live Demo

//C program to store Student records as Structures and Sort them by Name
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
   int student_id;
   char* student_name;
   int student_percentage;
};
int comparator(const void* s1, const void* s2){
   return strcmp(((struct Student*)s1)->student_name,((struct Student*)s2)->student_name);
}
int main() {
   int n = 5;
   struct Student arr[n];
   //student 1
   arr[0].student_id = 1;
   arr[0].student_name = "Nupur";
   arr[0].student_percentage = 98;
   //student 2
   arr[1].student_id = 2;
   arr[1].student_name = "Akash";
   arr[1].student_percentage = 75;
   //student 3
   arr[2].student_id = 3;
   arr[2].student_name = "Yash";
   arr[2].student_percentage = 62;
   //student 4
   arr[3].student_id = 4;
   arr[3].student_name = "Jyoti";
   arr[3].student_percentage = 87;
   //student 5
   arr[4].student_id = 5;
   arr[4].student_name = "Ramlal";
   arr[4].student_percentage = 80;
   printf("Unsorted Student Record:\n");
   for (int i = 0; i < n; i++) {
      printf("Id = %d, Name = %s, Age = %d \n", arr[i].student_id, arr[i].student_name, arr[i].student_percentage);
   }
   qsort(arr, n, sizeof(struct Student), comparator);
   printf("\n\nStudent Records sorted by Name:\n");
   for (int i = 0; i < n; i++) {
      printf("Id = %d, Name = %s, Age = %d \n", arr[i].student_id, arr[i].student_name, arr[i].student_percentage);
   }
   return 0;
}

Output

Unsorted Student Record:
Id = 1, Name = Nupur, Age = 98
Id = 2, Name = Akash, Age = 75
Id = 3, Name = Yash, Age = 62
Id = 4, Name = Jyoti, Age = 87
Id = 5, Name = Ramlal, Age = 80
Student Records sorted by Name:
Id = 2, Name = Akash, Age = 75
Id = 4, Name = Jyoti, Age = 87
Id = 1, Name = Nupur, Age = 98
Id = 5, Name = Ramlal, Age = 80
Id = 3, Name = Yash, Age = 62
raja
Published on 05-Aug-2020 07:33:24
Advertisements