как отсортировать имена в c по массиву - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу знать, как сортировать имя по массиву. У меня есть проблема с сортировкой и печатью. Понятия не имею, потому что я новичок в программировании C. пожалуйста, посоветуйте мне (извините за мой английский sh) спасибо. enter image description here

code that i have
#include<stdio.h>
#include<string.h>
#include <ctype.h>
int main(){
    int i = 0;
    char choose[10];
    struct Student{
        char name[61];
        char surname[61];
        char sex[10];
        char age[3];
        char id[12];
        float gpa;
    }student[20];
    for(i=0;i<20;i++){
        scanf("%s %s %s %s %s %f",student[i].name, student[i].surname, student[i].sex,student[i].age,student[i].id,student[i].gpa);
    }
    for(int i =0;i<20;i++){
        //sort
    }
}

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Когда задача касается сортировки массивов, qsort - в большинстве случаев - ваш друг.

Все, что вам нужно сделать, - это предоставить функцию сравнения , которая сообщает, элемент меньше, равен или больше другого элемента. Затем qsort обрабатывает все остальное.

Пример:

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

struct Student{
    char name[61];
    char surname[61];
    char sex[10];
    char age[3];
    char id[12];
    float gpa;
};

void printData(struct Student* s, int n)
{
    for (int i=0; i<n; ++i)
    {
        printf("%s %s %s %s %s %f\n", 
               s[i].sex, s[i].name, s[i].surname, s[i].age, s[i].id, s[i].gpa);
    }
}

// Compare function for qsort
int cmp(const void *p1, const void *p2)
{
  struct Student* pa = (struct Student*)p1;
  struct Student* pb = (struct Student*)p2;
  return strcmp(pa->name, pb->name);
}

int main(void)
{
    struct Student data[3] = {
        {"bbb", "bbbb", "Mr", "42", "idx", 42.0},
        {"ccc", "cccc", "Ms", "42", "idy", 43.0},
        {"aaa", "aaaa", "Mr", "42", "idz", 44.0}
    };

    printf("Before sorting:\n");
    printData(data, 3);

    qsort(data, 3, sizeof data[0], cmp); 

    printf("After sorting:\n");
    printData(data, 3);

    return 0;
}

Выход:

Before sorting:
Mr bbb bbbb 42 idx 42.000000
Ms ccc cccc 42 idy 43.000000
Mr aaa aaaa 42 idz 44.000000
After sorting:
Mr aaa aaaa 42 idz 44.000000
Mr bbb bbbb 42 idx 42.000000
Ms ccc cccc 42 idy 43.000000
0 голосов
/ 15 апреля 2020
#include <stdio.h>
#include <string.h>
void main()
{

    char name[10][8], tname[10][8], temp[8];
    int i, j, n;

    printf("Enter the value of n \n");
    scanf("%d", &n);
    printf("Enter %d names n \n", n);

    for (i = 0; i < n; i++) 
    {
        scanf("%s", name[i]);
        strcpy(tname[i], name[i]);
    }

    for (i = 0; i < n - 1 ; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(name[i], name[j]) > 0) 
            {
                strcpy(temp, name[i]);
                strcpy(name[i], name[j]);
                strcpy(name[j], temp);
            }
        }
    }

    printf("\n----------------------------------------\n");
    printf("Input NamestSorted names\n");
    printf("------------------------------------------\n");

    for (i = 0; i < n; i++) 
    {
        printf("%s\t\t%s\n", tname[i], name[i]);
    }

    printf("------------------------------------------\n");

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...