我需要为我的UNI编写代码,其中我必须接收2个数组的数组(可能是int数组或char数组,甚至是float数组),并比较两个数组中指针的n个字符,到目前为止,我一直坚持这一点 *请注意 - 我需要编写自己的memcmp :
int byte_compare(const void *b1,const void *b2,size_t len)
{
char *q1 = (char *)p1;
char *q2 = (char *)p2;
int i;
for (i=0; i<=len*sizeof(*q1) ;i++)
{
if(*q1++ != *q2++)
return 1;
}
return 0;
}
int main()
{
char str1[] = "abcheya";
char str2[] = "gtyheyb";
printf((byte_compare(str1[3],str2[3],3))?"not equal\n":"equal\n");
/*the output is equal*/
int arr1[]={1,2,3,4};
int arr2[]={1,2,7,59};
printf((byte_compare(arr1[0],arr2[0],3))?"not equal\n":"equal\n");
/*the output is also equal although it is not supposed to be*/
return 0;
}
当我比较字符串时它工作正常,但是当我尝试比较int或float时它不能正常工作,请帮助我。
答案 0 :(得分:1)
您应该在传递len参数时计算比较字节长度。因此,您可以使用模板。
template<typename T>
int byte_compare(const T *b1, const T *b2, size_t len)
{
return memcmp(b1, b2, len * sizeof(T));
}
编辑注释:问题已编辑,答案没有更多意义。它使用C ++,不适用于C课程。我仍然没有使用C ++的限制。
答案 1 :(得分:0)
编辑:编写自己的memcmp
函数
int byte_compare(const void *b1,const void *b2,size_t len)
{
if (len != 0) {
register const unsigned char *p1 = b1, *p2 = b2;
do {
if (*p1++ != *p2++)
return (*--p1 - *--p2);
} while (--len != 0);
}
return (0);
}
答案 2 :(得分:0)
你需要传递对象的 size ,而不是它们的长度:
int byte_compare(const void *b1, const void *b2, size_t size)
{
return memcmp(b1, b2, size);
}
答案 3 :(得分:0)
您的教师可能不希望您使用库调用。所以写一个字节比较(也就是memcmp)。
获取K&amp; R C(或C上的其他书籍)的副本,您将找到如何在循环中处理char(acter)值的示例。
int byte_compare(const void *b1,const void *b2,size_t len)
{
if( !b1 || !b2 ) return 0; //0 represents false
char* p1=(char*)b1; char* p2=(char*)p2;
for( ; len --> 0; ) {
if( *p1++ != *p2++ ) return 0;
}
return 1;
}