【发布时间】:2021-07-09 20:20:40
【问题描述】:
我正在尝试创建一个可以接收变量的函数,该变量可以是 char 或 int,为此我必须给变量一个类型,但我不知道该放什么,因为我希望它能够接收两者。 我的代码是这样的,我不知道在写“IDK”的地方放什么:
#include <stdio.h>
#include <string.h>
int is_string = 0;
#define less(A,B) (!is_string ? ((A)<(B)) : (strcmp(A,B)<0))
void merge(IDK a[], int l, int m, int r)
{
IDK aux[10000][20];
int i, j, k;
for (i = m+1; i > l; i--) aux[i-1] = a[i-1];
for (j = m; j < r; j++) aux[r+m-j] = a[j+1];
for (k = l; k <= r; k++){
if (less(aux[j], aux[i])) a[k] = aux[j--];
else a[k] = aux[i++];
}
}
void mergesort(IDK a[], int l, int r) {
int m = (r+l)/2;
if (r <= l)
return;
mergesort(a, l, m);
mergesort(a, m+1, r);
merge(a, l, m, r);
}
int main(){
mergesort(a,left,right);
}
当变量is_string 为 1 时,我希望“IDK”为 char,否则为 int...
目标是使用该函数按字母顺序或数字(从最低到最高)对单词进行排序,该函数一次只需对一种类型的对象进行排序,但我希望它能够对两种类型的对象进行排序,所以我不'不必重复代码。
我想要一个程序来选择(在运行时)它需要排序的类型。
谢谢
【问题讨论】:
-
使用
union类型。 -
您希望它是
char还是char *?strcmp()需要char *。 -
@Vasco Trancoso Vaz 在哪里声明了 aux?
-
从你的宏
less我猜你想比较数字或字符串。这将变得更加复杂,因为char[]要么是单个字符的数组,要么是 one 字符串。为了复制字符串,您必须使用指针或使用strcpy。您想在同一个程序中使用两种变体(整数或字符串)还是想在编译时选择一个?请edit你的问题澄清一下,不要用cmets来回答。 -
@Bodo 完成了,正是这样,我希望我的算法能够有时对字符串进行排序,而在其他时间对整数进行排序
标签: arrays c sorting types mergesort