所以我有这个排序函数,假设要接受一个结构数组,我需要按名称组织它们,它们都有名字和姓氏,如果它们的姓氏相同,那么我必须转到要比较的名字。所以我创建了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;
}
}
}
}
任何人都知道什么是错的?
答案 0 :(得分:4)
buffer < buffer2
绝对不是你想要的。那只是比较两个内存地址!您应该使用函数strcmp()
。例如,
if (strcmp(buffer, buffer2) < 0)
答案 1 :(得分:2)
您的功能应如下所示:
用于名称比较
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;
}
}
}
}