【发布时间】:2018-04-24 10:08:24
【问题描述】:
我在这里要做的是根据 Struct 中的字符串对指向 Structs 的指针数组进行排序。我认为只交换数组中的指针而不是交换整个 struct 会很容易。所有元素都是动态分配的。我的代码是用德语写的,所以我只会用英语写我看不懂的部分。提前感谢您的帮助。
typedef struct Vehicle {
char *manufacturer;
char *serialnumber;
int weight;
};
void SortByID(struct fahrzeug** data, int Anzahl){
struct Vehicle *temp= (struct Vehicle*)malloc( sizeof(struct Vehicle) );
int i =0 ;// I think i've written something wrong here ( strcmp)
while ( i < Anzahl && strcmp(data[i]->serialnumber, data[i+1]->serialnumber) < 0)
{
temp = data[i+1];
data[i+1] = data[i];
data[i]=temp ;
i++;
}
free(temp);
temp=NULL;
}
int main(){
int count =0 ;
struct Vehicle **array = NULL ;
array=(struct Vehicle**)malloc( 5 * sizeof(struct Vehicle*) );
for(int i=0;i<5 ;i++){
array[i] = (struct Vehicle*)malloc( sizeof(struct Vehicle) ) ;
count++;
}
SortByID ( &array, count ) ; // is this right ?
return 0;
}
我也尝试使用 qsort 函数对其进行排序,但没有成功
int compare(const void *a, const void *b) {
struct Vehicle * const *one = a;
struct Vehicle * const *two = b;
return strcmp((*one)->serialnumber, (*two)->serialnumber);
}
void SortByID(struct Vehicle** data, int Anzahl){
qsort( data, Anzahl, sizeof(struct Vehicle*) ,compare );
}
【问题讨论】:
-
您可以使用
qsort()而不是编写自己的排序函数。 -
谢谢,我会试试的。qsort 只会交换数组内的指针位置?
-
qsort()将交换数组中的数据,无论它是什么类型和大小。在您的情况下,数据是一个指针,因此将按照比较函数的指示进行交换。 -
这样可以吗:
int compare ( struct Vehicle*a, struct Vehicle* b){ return strcmp(a->serialnumber, b->serialnumber); } void SortByID(struct fahrzeug** data, int Anzahl){ qsort( data, Anzahl, sizeof(struct fahrzeug*) ,compare ); } -
看起来不错。试试看。
标签: c arrays sorting pointers struct