typedef struct Workers
{
char id[10];
char *fName;
char *lName;
int yob;
int monthlyHours;
int salary;
}workers;
所以我有一个充满 worker 详细信息的结构。 在主菜单中,用户输入一个选项: 1.按id排序 2.按名字排序 3.按月小时数排序 我需要创建一个决策函数,它是一个指针函数,它将按所选选项按字符串或整数对结构进行排序。
我编写了一个冒泡排序函数和一个交换函数,但完全不知道如何创建一个可以处理所有类型排序的决策函数
交换功能的当前状态
int me_compare(workers *me1, workers *me2) {
int surnameResult;
surnameResult = strcmp(me1->fName, me2->fName);
return surnameResult;
}
排序函数的当前状态
void sortStruct(workers newWorkers[N], int numOfSort)
{
workers tmp;
workers tmp2;
int i = 0;
int j = 0;
int result;
int swapped;
for ( i = 0;( i < N-1); i++)
{
swapped = 0;
for (j = 0; j < N-i - 1; j++)
{
tmp = newWorkers[j];
tmp2 = newWorkers[j + 1];
result = me_compare(&tmp, &tmp2);
if (result == 1)
{
newWorkers[j] = tmp2;
newWorkers[j + 1] = tmp;
swapped = 1;
}
}
if (swapped == 0)
break;
}
}
有什么建议可以帮助我处理这个问题吗?
最佳答案
对于 int 值,我们使用
for(i = 0; i < n-1; i++)
{
for(j = 0 ; , j = n-i-1; j++)
{
if(value[i]>value[i+1])
swap(value[i],value[i+1]);
}
}
类似地,对于结构函数,我们可以使用
if(workers[i]->salary > workers[i+1]->salary)
C++ 中的模板用于编写具有泛型类型的函数,但在 C 中我们没有此功能
我建议您为 int 和 char 类型编写两个不同的交换函数,并在排序时编写额外的代码来识别它是 char 还是 int 并根据此使用交换函数
关于C- 交换结构数组内的字符串或数字的决策函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50763210/