Как отсортировать массив структур с помощью указателей? - PullRequest
0 голосов
/ 18 декабря 2018

Написать программу для ввода идентификатора, имени и адреса в массив структуры и сортировать их в порядке возрастания на основе имени с использованием указателя?

Я пытался найти так много вопросов вэтот форум, но никто из них точно не помог мне.Так вот мой код:

 #include<stdio.h>
struct student
{
    char name[20], add[30];
    int id;
};
int main()
{
    struct student s[100];
    struct student *sptr;
    int i, j, temp, n;
    char tempc[30];
    sptr=&s;
    printf("How many students do we have to register?");
    scanf("%d",&n);
    printf("Enter the id, name and address of the students and hit enter.");

    for (i=0; i<n; i++)
    {
        scanf("%d%s%s",&sptr->id,&sptr->name,&sptr->add);
        sptr++;
    }
    sptr=&s;
    for(i=0; i<n; i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(strcmp(s[i].name,s[j].name)>0)
            {
                strcpy(tempc,(sptr+i)->name);
                strcpy(sptr->name,(sptr+j)->name);
                strcpy((sptr+j)->name,tempc);
                strcpy(tempc,sptr->add);
                strcpy(sptr->add,(sptr+j)->add);
                strcpy((sptr+j)->add,tempc);
                temp=(sptr+j)->id;
                sptr->id=(sptr+j)->id;
                (sptr+j)->id=temp;

            }
        }
    }
    printf("The sorted form is:");

     for (i=0; i<n; i++)
    {
        printf("%d%s%s",sptr->id,sptr->name,sptr->add);
        sptr++;
    }



}

Если вы понимаете, куда я иду, пожалуйста, помогите мне.И да, я не хочу использовать какие-либо функции выделения памяти или функцию sizeof ().

1 Ответ

0 голосов
/ 18 декабря 2018

Просто используйте qsort как показано ниже:

int compare_student (const void * a, const void * b)
{

  struct student *lhs = (struct student *)a;
  struct student *rhs = (struct student *)b;

  return strcmp( lhs->name, rhs->name) ;
}

// N = total number of students;

qsort (s, N, sizeof(struct student), compare_student);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...