繁体   English   中英

为什么这个排序功能不起作用? C

[英]Why doesn't this sorting function work? C

所以我有这个排序函数,假设接受一个结构数组,我需要按名称组织它们,它们都有名字和姓氏,如果它们的姓氏相同,那么我必须转到第一个名字比较一下。 所以我创建了2个字符串,其中包含最后和第一个名称组合成1,然后我遍历列表并查看哪个很小并将其向上移动。 但问题是......它什么也没做......根本就不知道为什么!?

void sortStruct(struct student *list, int studentCount){

int j, k;

struct student temp;

char buffer[35];
char buffer2[35];

for (j = 0 ; j <= studentCount-2 ; j++){

    sprintf(buffer, "%s, %s", list[j].lastname, list[j].firstname);

    for(k = 1 ; k <= studentCount-1 ; k++){

        sprintf(buffer2, "%s, %s", list[k].lastname, list[k].firstname);

        if(buffer < buffer2){

            temp = list[j];
            list[j] = list[k];
            list[j] = temp;

        }
    }
}
}

谁知道什么是错的?

buffer < buffer2绝对不是你想要的。 那只是比较两个内存地址! 您应该使用strcmp()函数。 例如,

if (strcmp(buffer, buffer2) < 0)

您的功能应如下所示:

用于名称比较

void sortStruct(struct student *list, int studentCount)
{

   int j, k;
   struct student temp;
   char buffer[35];
   char buffer2[35];

   for (j = 0 ; j <= studentCount-2 ; j++)
   {
     sprintf(buffer, "%s, %s", list[j].lastname, list[j].firstname);
     for(k = 1 ; k <= studentCount-1 ; k++)
     {
       sprintf(buffer2, "%s, %s", list[k].lastname, list[k].firstname);
       if(strcmp(buffer, buffer2)<0)
       {
            temp = list[j];
            list[j] = list[k];
            list[j] = temp;
       }
     }
   }
}

用于名称长度比较

void sortStruct(struct student *list, int studentCount)
{

  int j, k;
  struct student temp;
  char buffer[35];
  char buffer2[35];

  for (j = 0 ; j <= studentCount-2 ; j++)
  {
    sprintf(buffer, "%s, %s", list[j].lastname, list[j].firstname);

    for(k = 1 ; k <= studentCount-1 ; k++)
    {

     sprintf(buffer2, "%s, %s", list[k].lastname, list[k].firstname);

      if(strlen(buffer)< strlen(buffer2))
      {
         temp = list[j];
         list[j] = list[k];
         list[j] = temp;
      }
    }
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM