簡體   English   中英

如何消除結構中的重復項,並使用qsort在C中對它們進行排序

[英]How to eliminate duplicates in a struct, and use qsort to sort them in C

我正在嘗試從特定國家/地區查找結構中的人員,消除重復項,並對其余部分進行排序,並使用qsort命名。

我的結構如下:

struct rider_info{
  char race_name[30];
  char name[50];
  char lastname[30];
  int age;
  char team[4];
  char country[4];
  };

因此,我正在讀入結構的文件中的某些人出現在多個種族中。 因此,我需要消除重復項,但是我不確定該怎么做。 然后,我需要根據團隊和姓名對那些使用qsort的人進行排序。 我做了嘗試,但是它只是打印了我需要的那個特定國家的所有人。 這是此時的代碼:

void print_belgian_riders(FILE *fp, int j, rider_info person[j]) {
  char str[4] = "BEL"; //i need to print Belgian riders
  char line[128];
  int lines = count_lines();    
  for (j = 0; j < lines; ++j) {
      if (strcmp(person[j].country, str) == 0) {
          qsort(person, 20, sizeof(person), struct_comp_team);
          printf("%s %s %d %s %s ",
               person[j].name,
               person[j].lastname,
               person[j].age,
               person[j].team,
               person[j].country);
               printf("\n");

      }

   }
}

這是我的比較功能,用於按團隊和姓名進行排序:

int struct_comp_team(const void *ep1, const void *ep2) {
  int TeamSort = strcmp((((rider_info*)ep1)->team), ((rider_info*)ep2)->team);
  int lastNameSort = strcmp(((rider_info*)ep1)->lastname, ((rider_info*)ep2)->lastname);

  if (TeamSort != 0) {
      return (TeamSort);

  } 
  else if (lastNameSort != 0) {
      return lastNameSort;
  }
}

我的比較功能無法正常工作,我不確定它有什么問題,有人知道如何實現嗎? 還有誰對我應該消除重復有想法嗎?

根據mch建議修改比較功能。

int struct_comp_team(const void *ep1, const void *ep2) {
  int TeamSort = strcmp((((rider_info*)ep1)->team), ((rider_info*)ep2)->team);
  int lastNameSort = strcmp(((rider_info*)ep1)->lastname, ((rider_info*)ep2)->lastname);

  if (TeamSort != 0) {
      return (TeamSort);

  } 
  else if (lastNameSort != 0) {
      return lastNameSort;
  }
  return 0;//duplicate value
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM