只有传入的参数类型不同的同种功能函数,如何把主代码只写在一个函数里
明明是同一种功能,但因为传入的类型不一样就写了3个只有参数不同的函数,请问有更好的办法吗??//整理由小到大之正整数的数组,使其中任意数均不为任意数的倍数
//要求以零标示结束,参数为指向首元素的指针
//回传值为整理后的数组长度,不再以零标示结束
int DivisorArrayUnsignedShort(unsigned short* a);
int DivisorArrayUnsignedInt(unsigned int* a);
int DivisorArrayUnsignedLongLong(unsigned long long* a);
DivisorArrayUnsignedShort(unsigned short* a)
{
int num = 1, i, j;
if (!a) return 0;
for (i=1;a;)
{
for (j=0;j<num;)
{
if ( ! (a%a) ) goto next;
}
a=a;
next: i++;
}
return num;
}
DivisorArrayUnsignedInt(unsigned int* a)
{
int num = 1, i, j;
if (!a) return 0;
for (i=1;a;)
{
for (j=0;j<num;)
{
if ( ! (a%a) ) goto next;
}
a=a;
next: i++;
}
return num;
}
DivisorArrayUnsignedLongLong(unsigned long long* a)
{
int num = 1, i, j;
if (!a) return 0;
for (i=1;a;)
{
for (j=0;j<num;)
{
if ( ! (a%a) ) goto next;
}
a=a;
next: i++;
}
return num;
}
参数改成void*,然后函数体内转为相应格式 jacklusch 发表于 2016-11-12 08:30
参数改成void*,然后函数体内转为相应格式
怎么转类型呢,我只会声明新变量,但声明变量不能放在条件句中 void xx(void * aa)
{
if((char*)aa==?)
if(*(int*)aa==?)
} 看你的要求以\0结尾的话标准的就是个char* 就可以了 看懂我的问题再回答吧.....{:10_284:} 呵呵,现在求助这么牛啊?看懂?是你自己没看懂吧?你传入的short*也好char*也好实际上并没有区别
这就我让你传void*的原因,回答你的问题还回答出错来了? //整理由小到大之正整数的数组,使其中任意数均不为任意数的倍数
//要求以零标示结束,参数为指向首元素的指针 //?这不是标准的char*类型么?
//回传值为整理后的数组长度,不再以零标示结束 本帖最后由 huabcdf 于 2016-11-12 23:36 编辑
看你的问题,看前面三行注释,我猜想你的意思是想用一个函数处理几种不同的数据类型,可以用函数模板。
但你的代码我看了下,好像没有你前面注释的功能,只有一个删除重复数据和第一个数倍数的作用,排序算法有错。 jacklusch 发表于 2016-11-12 18:05
呵呵,现在求助这么牛啊?看懂?是你自己没看懂吧?你传入的short*也好char*也好实际上并没有区别
这就我让你 ...
如有冒犯之处抱歉拉{:10_292:},因为看不懂你所说的东西{:10_262:},有时间的话,帮我改下代码吧,感谢{:10_254:} huabcdf 发表于 2016-11-12 23:34
看你的问题,看前面三行注释,我猜想你的意思是想用一个函数处理几种不同的数据类型,可以用函数模板。
但 ...
对的{:10_266:},只是我还没学到那里 本帖最后由 huabcdf 于 2016-11-13 17:46 编辑
fc1735 发表于 2016-11-13 00:29
对的,只是我还没学到那里
差点看走眼了,楼主的代码没有问题,楼主要处理的是己经从小到大排序好的数组,并且数组最后一个元素以0标志结束,差点以为要在函数里排序了。修改成为模板函数如下,如有出错请各位大神指正:
template <class T>
int DivisorArray(T *a)
{
int num = 1, i, j;
.........
//完整代码复制出来粘贴在这里出了点问题,只好用“........”来代替,其实函数里没有任何改动,
}
本帖最后由 fc1735 于 2016-11-13 23:10 编辑
huabcdf 发表于 2016-11-13 17:40
差点看走眼了,楼主的代码没有问题,楼主要处理的是己经从小到大排序好的数组,并且数组最后一个元素以 ...
谢谢你了,只用C语言好像很难实现,我再努力一点把C++学起来吧{:10_254:}{:10_254:}
应该算解决了吧,结论就是用C++吗?{:10_291:}
页:
[1]