我有一个结构体,想要使用合并排序对该结构体的数组进行排序。 我需要将排序参数传递给合并函数并访问结构成员。 这可以用 C 语言完成吗?
示例:
struct movie_imdb_data {
char color[15];
char director_name[100];
int num_critic_for_reviews;
int duration; /// in min not date and time
int director_facebook_likes;
int actor_3_facebook_likes;
char actor_2_name[100];
int actor_1_facebook_likes;
int gross;
};
在 main
功能,我有:
if (argc > 2) {
column_sort = argv[2];
}
现在我想打电话merge_sort(<array of struct>, <column_sort *>)
我可以访问数组中的成员 array[0]->column_sort
进行比较?
现在我想调用合并排序并传递
我想传递数组和排序参数(我需要排序数组)我可以使用变量代替成员名称,即..
arr[1].column_sort
而不是
arr[1].color
最佳答案
听起来您想采用命令行参数来指定要排序的字段名称,然后对该字段进行排序。
为此,请尝试以下代码:
#include <stdlib.h>
#include <string.h>
/* compare function for field 3: "num_critic_for_reviews" */
int compField3(const void *a, const void *b)
{
struct movie_imdb_data* aStruct = (struct movie_imdb_data*)a;
struct movie_imdb_data* bStruct = (struct movie_imdb_data*)b;
return (aStruct->num_critic_for_reviews < bStruct->num_critic_for_reviews)?
-1: (aStruct->num_critic_for_reviews > bStruct->num_critic_for_reviews)?
+1: 0;
}
/* also define other compare functions for each field */
int main()
{
const char* columnName = argv[2];
struct movie_imdb_data* parray;
parray = your-array;
int (*comp)(const void *, const void *, void *) = 0;
/* map the column name to compare function for that column */
if (strcmp(columnName, "num_critic_for_reviews") == 0)
{
comp = compField3;
}
/* map other names to compare function for column */
else if (...) {...}
else { exit(1); /* if not recognized column name */ }
qsort(parray, numElementsOfArray, sizeof(struct movie_imdb_data), comp);
...
}
希望这有帮助!
关于c - C 中使用变量或指针访问结构体成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46414145/